Cod*_*Guy 56 objective-c nsdate nsstring ios
可能重复:
如何比较两个日期,返回天数.
我有两个日期(作为"yyyy-mm-dd"形式的NSString),例如:
NSString *start = "2010-11-01";
NSString *end = "2010-12-01";
Run Code Online (Sandbox Code Playgroud)
我想实施:
- (int)numberOfDaysBetween:(NSString *)startDate and:(NSString *)endDate {
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
Vik*_*ica 171
NSString *start = @"2010-09-01";
NSString *end = @"2010-12-01";
NSDateFormatter *f = [[NSDateFormatter alloc] init];
[f setDateFormat:@"yyyy-MM-dd"];
NSDate *startDate = [f dateFromString:start];
NSDate *endDate = [f dateFromString:end];
NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *components = [gregorianCalendar components:NSCalendarUnitDay
fromDate:startDate
toDate:endDate
options:0];
Run Code Online (Sandbox Code Playgroud)
components 现在有所不同.
NSLog(@"%ld", [components day]);
Run Code Online (Sandbox Code Playgroud)
Abi*_*ern 23
日期和时间编程有一个完整的指南.这是一个相关部分,为您提供有关如何做的提示.
这是示例代码来自另一个问题的地方.
尝试并根据它写一些东西,如果你有特定的问题,请回来.
编辑
好的.以下是我将以最基本的形式编写代码的方法.
首先,我会扩展NSDate.
头文件:
// NSDate+ADNExtensions.h
#import <Cocoa/Cocoa.h>
@interface NSDate (ADNExtensions)
- (NSInteger)numberOfDaysUntil:(NSDate *)aDate;
@end
Run Code Online (Sandbox Code Playgroud)
实施文件:
// NSDate+ADNExtensions.m
#import "NSDate+ADNExtensions.h"
@implementation NSDate (ADNExtensions)
- (NSInteger)numberOfDaysUntil:(NSDate *)aDate {
NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [gregorianCalendar components:NSDayCalendarUnit fromDate:self toDate:aDate options:0];
return [components day];
}
@end
Run Code Online (Sandbox Code Playgroud)
这是非常粗略的代码.没有错误检查或验证第二个日期晚于第一个日期.
然后我会像这样使用它(在64位垃圾收集环境中运行):
NSDate *startDate = [NSDate dateWithString:@"2010-11-01 00:00:00 +0000"];
NSDate *endDate = [NSDate dateWithString:@"2010-11-02 00:00:00 +0000"];
NSInteger difference = [startDate numberOfDaysUntil:endDate];
NSLog(@"Diff = %ld", difference);
Run Code Online (Sandbox Code Playgroud)
这真是太遗憾了,因为通过发布代码和不正确的输出以及获得更具体的帮助,您将学到更多东西.但如果你只是想成为一名剪切粘贴的程序员; 拿这个代码,祝你好运.
这段代码似乎在Swift 2中很好用:
func daysBetweenDate(startDate: NSDate, endDate: NSDate) -> Int
{
let calendar = NSCalendar.currentCalendar()
let components = calendar.components([.Day], fromDate: startDate, toDate: endDate, options: [])
return components.day
}
Run Code Online (Sandbox Code Playgroud)
Swift 4实施
方法调用:
let numberOfDays = daysBetweenDates(startDate: fileCreatedDate,endDate: date)
Run Code Online (Sandbox Code Playgroud)
方法实现:
func daysBetweenDates(startDate: Date, endDate: Date) -> Int {
let daysBetween = Calendar.current.dateComponents([.day], from: startDate, to: endDate)
print(daysBetween.day!)
return daysBetween.day!
}
Run Code Online (Sandbox Code Playgroud)
目标C的实现:
方法调用:
int numberOfDaysSinceFileCreation = [self daysBetweenDates: fileCreatedDate
currentDate: today];
Run Code Online (Sandbox Code Playgroud)
方法实现:
- (int) daysBetweenDates: (NSDate *)startDate currentDate: (NSDate *)endDate
{
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *dateComponent = [calendar components:NSCalendarUnitDay fromDate:startDate toDate:endDate options:0];
int totalDays = (int)dateComponent.day;
return totalDays;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
65619 次 |
| 最近记录: |