我在我的应用/功能中发现了一个错误。我传入一个约会的NSString。 然后该函数使用NSDateFotmatterShortStyle。
下面是调试器中我的功能的屏幕截图。
我想以2011-04-18的日期结束 不知道为什么它增加1ppm,我需要它是00:00:00
发生了什么事,我该如何解决这个问题?
我从这里使用MidnightUTC函数(How do I create the current date (or any date) as an NSDate without hours, minutes and seconds?)来摆脱时间。
答案 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一小时。