Obj-C,问题格式化日期,获得一天?

时间:2011-04-18 20:28:53

标签: objective-c nsdateformatter

我在我的应用/功能中发现了一个错误。我传入一个约会的NSString。 然后该函数使用NSDateFotmatterShortStyle。

下面是调试器中我的功能的屏幕截图。

我想以2011-04-18的日期结束 不知道为什么它增加1ppm,我需要它是00:00:00

enter image description here

发生了什么事,我该如何解决这个问题?

我从这里使用MidnightUTC函数(How do I create the current date (or any date) as an NSDate without hours, minutes and seconds?)来摆脱时间。

2 个答案:

答案 0 :(得分:1)

我实际上看不到midnightUTC方法和你提供的代码之间没有联系。

无论如何,你给出的例子的问题是,解析字符串4/18/11将默认缺少的值,如分钟等和你当前的时区,但字符串将被假定为GMT时间所以这将导致您看到的偏移量。

解决方案是设置NSDateFormatter的时区。看看这段代码,我已经在一分钟前测试了它,并且控制台输出了。 aaa显示奇数偏移,bbb确实看起来像预期的那样。

NSDateFormatter *dt = [[[NSDateFormatter alloc] init] autorelease];

[dt setDateStyle:NSDateFormatterShortStyle];

NSDate *aaa = [dt dateFromString:@"4/18/11"];

NSLog(@"1a. %@", [dt timeZone]);    
NSLog(@"1b. %@", aaa);

[dt setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];
NSDate *bbb = [dt dateFromString:@"4/18/11"];

NSLog(@"2a. %@", [dt timeZone]);        
NSLog(@"2b. %@", bbb);

控制台输出

1a. Europe/Berlin (CEST) offset 7200 (Daylight)
1b. 2011-04-17 22:00:00 +0000
2a. GMT (GMT+00:00) offset 0
2b. 2011-04-18 00:00:00 +0000

答案 1 :(得分:0)

您正在使用的midnightUTC函数通过将timeZone设置为GMT来创建日期,这与UTC的一半不同。 UTC没有观察到任何夏令时/夏令时变化,而GMT确实如此,因此[NSTimeZone timeZoneForSecondsFromGMT:0]大约半年将离开UTC一小时。