将String转换为Date并获取差异

时间:2010-12-23 05:02:44

标签: iphone objective-c

嗨我有两个日期的字符串格式

base_date_string = 10-12-01 12:00:00 current_date_string = 10-12-23 10:18:00 以上两个值都在字符串

我想知道这两个日期之间经过的天数

我尝试使用NSDateFormatters将它们转换为NSDate然后获得差异。 我意识到字符串没有正确转换为NSDate

当我转换为nsdate时,我得到了 base_date ::: 2010-12-01 06:30:00 +0000 current_date :::: 2010-12-23 04:48:19 +0000(时间部分不完美)

我使用的Formatter类是:

    NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init];
    [formatter1 setDateFormat:@"yy-MM-dd HH:mm:ss"];
    NSDate *base_date = [formatter1 dateFromString:@"10-12-01 12:00:00"];
    [formatter1 release];

    NSDateFormatter *formatter2 = [[NSDateFormatter alloc] init];
    [formatter2 setDateFormat:@"yy-MM-dd HH:mm:ss"];
    NSDate *current_date = [formatter2 dateFromString:current_date_string];
    [formatter2 release];

//从当前日期开始的基础的subrtrcation来获取经过的天数

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *diff = [calendar components:(NSDayCalendarUnit)                       
                         fromDate:base_date toDate:current_date options:0];
int date_value = [diff day];

欢迎任何帮助

3 个答案:

答案 0 :(得分:1)

发现NSDate文档中的

30秒:

-[NSDate timeIntervalSinceDate:]

所以使用你问题中的日期......

NSTimeInterval difference = [current_date timeIntervalSinceDate:base_date];
difference = fabs(difference);
NSLog(@"there are %f seconds between %@ and %@", difference, current_date, base_date);

修改

好的,所以问题不是日期差异。您正在观察您输入的字符串比您回来的日期早5个半小时。

好吧,让我们看看这个。返回的日期是GMT时间(由+0000表示)。提前5个半小时是印度使用的时区。所以。你在印度吗?如果您是,那么这只需要-setTimezone:上的NSDateFormatter

答案 1 :(得分:0)

您可以使用此功能代码来区分2个日期

-(int)howManyDaysHavePast:(NSDate*)lastDate :(NSDate*)today {
NSDate *startDate = lastDate;
NSDate *endDate = today;
NSCalendar *gregorian = [[NSCalendar alloc]
                         initWithCalendarIdentifier:NSGregorianCalendar];
unsigned int unitFlags = NSDayCalendarUnit;
NSDateComponents *components = [gregorian components:unitFlags
                                            fromDate:startDate
                                              toDate:endDate options:0];
[gregorian release];
int days = [components day];
return days;
}

快乐的iCODING ......

答案 2 :(得分:0)

使用以下代码

NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init];
[formatter1 setDateFormat:@"yy-MM-dd HH:mm:ss"];
NSDate *base_date = [formatter1 dateFromString:@"10-12-01 12:00:00"];

NSDate *current_date = [formatter2 dateFromString:current_date_string];
[formatter1 release];

NSTimeInterval difference = [current_date timeIntervalSinceDate:base_date];

然后你会得到秒数的差异。然后你可以按照以下几天获得

float days = difference/86400;

“days”包含current_date与base_date不同的天数。