在Objective-C中将时间转换为本地时间
我遇到过这样一个问题:正确的时间过去了,但一旦它到达在Objective-C中将时间转换为本地时间,objective-c,nsdate,nsdateformatter,Objective C,Nsdate,Nsdateformatter,我遇到过这样一个问题:正确的时间过去了,但一旦它到达[formatter setDateFormat:date]它就会出现在不同的时区。这里是一个片段 NSDate* date = user.startDate; NSDateFormatter *format = [[NSDateFormatter alloc] init]; NSLog(@"-------> (1) time is %@", date); NSLog(@"-------> (2) time is %@", date
[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)
的输出是时间是上午9:25
发生了这样的事情:日期的日志总是GMT(我认为我没有必要深入了解细节,因为有很好的解释。)这意味着日志1、2和3将是“错误的”(不在您的时区)这是意料之中的
例如,如果您希望将字符串记录为GMT,则可以更改日期格式化程序的属性timeZone
处理日期可能非常困难。如果不是全部,请花时间阅读文档的一些重要部分(基础/基础)。您的时区显然是UTC-7000
NSLog
始终以UTC打印NSDate
对象,NSDateFormatter
考虑当前时区。打印的日期实际上是一样的
如果确实需要UTC格式的所有日期,请设置格式化程序的时区
format.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
顺便说一句:有内置的方法来检查日期是在今天还是昨天。我删除了与您的问题无关的代码(但保留了重复的行,以便答案中的引用仍然有效)。请注意,(1)、(2)、(3)只是在做完全相同的事情。日期是不可变的,并且是同一个实例,并且您没有使用格式化程序。