如何在没有硬编码手动计算的情况下使用UTC时区偏移来偏移NSDate

时间:2016-07-19 11:24:15

标签: ios swift nsdate

想象一下当前的当地时间是15:11 UTC。我从服务器检索一个数据集,显示业务的开始关闭时间,如下所示:

{
close = {
   day = 3;
   time = 0200;
};
open = {
   day = 2;
   time = 1700;
};

我还收到一个像这样暴露的utc-offset属性:"utc_offset" = "-420”;我想这是一个小小的偏移,给出了7小时的小时偏移,这似乎是正确的,考虑到我所在的时区是UTC和商业地点的我收到的开放时间信息是洛杉矶的一家企业,他们落后7个小时。

如何使用此属性然后能够对其进行任何时间计算 我想确定当前的本地时间是否介于我已经想到的开启和关闭时间之间但计算结果是错误的,考虑到在本地时区进行时间比较时需要在计算该时间范围之前进行偏移

我试图避免做像

这样的事情

伪码: NSDate.date hour componenent + (UTC_offset / 60 = -7 hours)

更新 以下是我目前正在检查业务是否立即开放的方式

        if currentArmyTime.compare(String(openInfo.time)) != .OrderedAscending && currentArmyTime.compare(String(closeInfo.time)) != .OrderedDescending {
            //The business is open right now, though this will not take into consideration the business's time zone offset.
        }

是否更容易抵消当前时间?

1 个答案:

答案 0 :(得分:3)

在日期操作中使用“打开”和“关闭”时间之前,您需要从已设置为这些时间的时区的日历创建NSDate。这是一个例子:

// Create calendar for the time zone
NSInteger timeOffsetInSeconds = -420 * 60;
NSTimeZone *tz = [NSTimeZone timeZoneForSecondsFromGMT:timeOffsetInSeconds];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
calendar.timeZone = tz;

// Create an NSDate from your source data
NSDateComponents *comps = [[NSDateComponents alloc] init];
comps.day = 1;
comps.month = 1;
comps.year = 2016;
comps.hour = 8;
comps.minute = 0;
NSDate *openTime = [calendar dateFromComponents:comps];

// 'openTime' can now be to compared with local time.
NSLog(@"openTime = %@", openTime);  // Result is openTime = 2016-01-01 15:00:00 +0000

您应该将上面的代码放入一个接受原始时间和时间偏移量的方法中。