我花了几个小时来解决这个奇怪的问题。我在“dd/mm/yyyy hh:mm:ss”中有日期格式,想知道我的日期和现在之间的秒数差异。我正在像下面那样做,但不明白为什么会出现 31 天错误?应该只是几个小时的差异!谁能帮我我在这里做错了什么?
NSString* datetime = @"03/02/2012 10:25:34"; // Today's date
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"dd/mm/yyyy hh:mm:ss"];
NSDate *dateFromString = [dateFormatter dateFromString:datetime];
NSTimeInterval diffSeconds = [[NSDate date] timeIntervalSinceDate:dateFromString];
int totalDays = diffSeconds/(24*60*60);
NSLog(@"seconds:%f totaldays:%d",diffSeconds, totalDays);
输出:
2012-02-03 10:50:50.480 UniversalApp[13114:707] diff:2679916.480563 totaldays:31
然后我再次尝试将 dateFromString 转换为 NSDate,令我惊讶的是它打印了完全随机的日期。不确定如何跟随?它应该给我原来的日期“日期时间”!
NSDateFormatter* formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"dd/mm/yyyy hh:mm:ss"];
NSString* str = [formatter stringFromDate:dateFromString];
NSLog(@"date:%@ to date:%@", datetime, str);
输出:
date:03/02/2012 10:25:34 to date:03/25/2012 10:25:34
[编辑]
将“dd/mm/yyyy hh:mm:ss”替换为“dd/MM/yyyy hh:mm:ss”有效,但秒差仍然不正确。请参阅以下不同日期的输出!
更正的代码:
NSLog(@"For Date:%@",[res objectForKey:@"CommentDate"]);
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"dd/MM/yyyy hh:mm:ss"];
NSDate *dateFromString = [dateFormatter dateFromString:[res objectForKey:@"CommentDate"]];
NSTimeInterval diffSeconds = [[NSDate date] timeIntervalSinceDate:dateFromString];
int totalDays = diffSeconds/(24*60*60);
NSLog(@"seconds:%f totaldays:%d",diffSeconds, totalDays);
输出:(注意许多输出是楠!!)
2012-02-03 11:30:23.198 UniversalApp[13207:707] 日期:03/02/2012 10:25:34
2012-02-03 11:30:23.204 UniversalApp [13207:707] 秒:3889.204166 总天数:0
2012-02-03 11:30:23.506 UniversalApp [13207:707] 日期:02/02/2012 16:56:05
2012-02-03 11:30:23.512 UniversalApp [13207:707] 秒:南总天数:0
2012-02-03 11:30:23.818 UniversalApp[13207:707] 日期:02/02/2012 14:34:05
2012-02-03 11:30:23.827 UniversalApp[13207:707] 秒:南总天数:0
2012-02-03 11:31:25.253 UniversalApp [13207:707] ToDate: 02/02/2012 12:02:55
2012-02-03 11:31:25.255 UniversalApp [13207:707] 秒:127710.255748 总天数:1
2012-02-03 11:32:06.424 UniversalApp[13207:707] 日期:01/02/2012 11:01:20
2012-02-03 11:32:06.427 UniversalApp [13207:707] 秒:174646.427676 总天数:2
2012-02-03 11:32:06.639 UniversalApp[13207:707] 日期:31/01/2012 17:38:17
2012-02-03 11:32:06.643 UniversalApp[13207:707] 秒:南总天数:0
[编辑]
将 'hh' 替换为 'HH' 解决了上述问题!
[编辑]
我遇到的另一个问题......呼!
如果设置 24 小时关闭,这将不起作用!基于此,它被用户的设置覆盖。
对于最后一个问题,我找不到任何强有力的解决方案。最后我决定检查 'nan' 秒的值,如果它是 'nan' 然后使用原始日期字符串,不要转换为秒、小时等。
// Check for the 'nan', return if seconds='nan' invalid date format.
if(seconds != seconds)
return nil;
// 继续做你的工作