objective-c创建和比较时间 - 来自不同国家

时间:2016-05-18 15:31:38

标签: objective-c time

我有一个在不同国家/地区使用的应用。在我的应用程序中,我正在执行一个简单的计算,指出当前时间是否晚于下午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点(美国东部时间)......做点什么?

1 个答案:

答案 0 :(得分:1)

NSDate存储绝对时间 - 实际上是UTC时间内固定点的时间偏移量。

NSDateComponents有一个timeZone属性,用作转换为NSDate的基础,默认为当前时区 - 如结果所示。

如果你总是想在纽约下午3点设置这个属性。纽约是标准时区之一:America / New_York;所以你可以使用:

设置这个属性
dateAttempt.timeZone = [NSTimeZone timeZoneWithName:@"America/New_York"];

NSTimeZone了解夏令时,并且取决于您设置的转换日期,将视情况从EST或EDT转换。

HTH