1

我花了几个小时来解决这个奇怪的问题。我在“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;

// 继续做你的工作

4

3 回答 3

4

对于月份,它应该是“MM”。

更改以下行

[dateFormatter setDateFormat:@"dd/mm/yyyy hh:mm:ss"];

[dateFormatter setDateFormat:@"dd/MM/yyyy hh:mm:ss"];

编辑 对不起,格式应该是

[dateFormatter setDateFormat:@"dd/MM/yyyy HH:mm:ss"];
于 2012-02-03T11:05:51.840 回答
1

检查你的格式字符串,你想要@“dd/MM/yyyy hh:mm:ss”。有了你所拥有的,你将分钟视为月份。

于 2012-02-03T11:06:21.933 回答
0

试试这个

        NSDateFormatter *df = [[NSDateFormatter alloc] init];
        [df setDateFormat:@"dd-MM-yyyy HH:mm:ss"];

        NSDate *date = [df dateFromString:@"12-12-2013 15:50:50"];

         NSLog(@"Converted Date-->%@",date);

        NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
        [dateComponents1 setDay:6];

        NSDate *afterSomeDays = [[NSCalendar currentCalendar] dateByAddingComponents:dateComponents1 toDate:date options:0];

        NSLog(@"afterfifteenDays: %@", afterSomeDays);
于 2013-12-27T11:56:38.897 回答