我有一个在不同国家/地区使用的应用。在我的应用程序中,我正在执行一个简单的计算,指出当前时间是否晚于下午3点,做一些事情。
这就是我创建下午3点的方式。
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *dateAttempt = [[NSDateComponents alloc] init];
[dateAttempt setYear:2016];
[dateAttempt setMonth:05];
[dateAttempt setDay:18];
[dateAttempt setHour:15];
[dateAttempt setMinute:00];
NSDate *threePm = [calendar dateFromComponents:dateAttempt];
NSLog(@"%@", dateAttempt);
NSLog(@"%@", threePm);
我在NewYork创建应用程序。当我运行上面的代码时,我得到...... 2016-05-18 11:17:53.815 x [1312:37272] 2016-05-18 19:00:00 +0000
我想这是有道理的,因为纽约比UTC晚了4个小时。 (这是我写这篇文章时的上午11点)
因此,ThreePm在NY给我相当于下午3点的UTC,并按预期工作。问题是当我改变笔记本电脑模拟器上的时间来模拟在另一个国家。例如希腊 如果我将电脑上的时间切换到希腊,由于对UTC的时间调整不同,上面的相同代码会产生不同的结果。
我该怎么说...无论应用程序在世界的哪个地方运行,如果时间晚于下午3点(美国东部时间)......做点什么?
答案 0 :(得分:1)
NSDate
存储绝对时间 - 实际上是UTC时间内固定点的时间偏移量。
NSDateComponents
有一个timeZone
属性,用作转换为NSDate
的基础,默认为当前时区 - 如结果所示。
如果你总是想在纽约下午3点设置这个属性。纽约是标准时区之一:America / New_York;所以你可以使用:
设置这个属性dateAttempt.timeZone = [NSTimeZone timeZoneWithName:@"America/New_York"];
NSTimeZone
了解夏令时,并且取决于您设置的转换日期,将视情况从EST或EDT转换。
HTH