将时间转换为当地时间 Objective-C
Convert time to local time in Objective-C
我遇到了这个问题,它传递了正确的时间,但是一旦到达 [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
事情是这样的:日期日志将始终为格林威治标准时间。 (我认为深入细节对我来说没有意义,因为有一个很好的解释 here。)这意味着日志 1、2 和 3 将是“错误的”(不在您的时区)并且应该是可以预料的。
例如,如果您想将字符串记录为 GMT,您可以更改日期格式器的 属性 timeZone
。
处理日期可能非常困难。如果不是全部,请花时间阅读 this 文档 (fundamentals/basics) 的一些重要部分。
您的时区显然是 UTC-7000。
NSLog
始终以 UTC 打印 NSDate
个对象,NSDateFormatter
考虑当前时区。打印出来的日期其实是一样的
如果您确实需要 UTC 中的所有日期,请设置格式化程序的时区。
format.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
顺便说一句:有内置方法可以检查日期是今天还是昨天。
我遇到了这个问题,它传递了正确的时间,但是一旦到达 [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
事情是这样的:日期日志将始终为格林威治标准时间。 (我认为深入细节对我来说没有意义,因为有一个很好的解释 here。)这意味着日志 1、2 和 3 将是“错误的”(不在您的时区)并且应该是可以预料的。
例如,如果您想将字符串记录为 GMT,您可以更改日期格式器的 属性 timeZone
。
处理日期可能非常困难。如果不是全部,请花时间阅读 this 文档 (fundamentals/basics) 的一些重要部分。
您的时区显然是 UTC-7000。
NSLog
始终以 UTC 打印 NSDate
个对象,NSDateFormatter
考虑当前时区。打印出来的日期其实是一样的
如果您确实需要 UTC 中的所有日期,请设置格式化程序的时区。
format.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];
顺便说一句:有内置方法可以检查日期是今天还是昨天。