我遇到了这个问题,其中通过了正确的时间,但一旦它到达[formatter setDateFormat:date]
,它就会在不同的时区出现。这是一个片段
NSDate* date = user.startDate;
NSDateFormatter *format = [[NSDateFormatter alloc] init];
NSLog(@"-------> (1) time is %@", date);
NSLog(@"-------> (2) time is %@", date);
[format setDateFormat:@"h:mm a"];
NSLog(@"-------> (3) time is %@", date);
NSLog(@"-------> (4) time is %@", [format stringFromDate:date]);
以下是日志消息的调试器输出
-------> (1) time is 2016-06-30 09:25:17 +0000
-------> (2) time is 2016-06-30 09:25:17 +0000
-------> (3) time is 2016-06-30 09:25:17 +0000
-------> (4) time is 2:25 AM
我希望(4)
的输出为time is 9:25 AM
答案 0 :(得分:1)
这是发生了什么:日期的日志将始终是GMT。 (我认为有一个很好的解释here让我了解细节是不合理的。)这意味着日志1,2和3将是“错误的”(不在您的时区)并且应该是预期的。
例如,如果要将字符串记录为GMT,则可以更改日期格式化程序的属性timeZone
。
处理日期可能非常困难。请花点时间阅读this文档的一些重要部分(基础知识/基础知识)。
答案 1 :(得分:1)
您的时区显然是UTC-7000。
NSLog
始终以UTC格式打印NSDate
个对象,NSDateFormatter
会考虑当前时区。打印日期实际上是相同的。
如果您确实需要UTC中的所有日期,请设置格式化程序的时区。
format.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
顺便说一句:有一些内置方法可以检查日期是在今天还是昨天。