如何将带有小时偏移的时间戳(以秒为单位)转换为本地iOS NSDate?

时间:2011-08-10 20:18:34

标签: iphone ios nsdate nsdateformatter

我试图将自1970年1月1日起以秒为单位的时间戳转换为小时时区偏移(即-6)到本地NSDate。以下是我到目前为止的情况:

    NSInteger startTime = 1312228800;
    NStInteger startTimeOffset = -6;
    NSDate *startTimeDate = [NSDate dateWithTimeIntervalSince1970:startTime];

    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss ZZZZ"];
    [dateFormatter setLocale:[NSLocale currentLocale]];        

    NSInteger gmtOffset = [startTimeOffset intValue]*60*60;
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:gmtOffset]];        
    NSDate *newStartTimeDate = [dateFormatter dateFromString:[dateFormatter stringFromDate:startTimeDate]];

例如,如果我的时间是1312228800,我将在格林威治标准时间0获得08/01/2011 20:00。实际的开始时间是格林威治标准时间-6的08/01/2011 14:00。但是如果我在EST的本地设备上,则startTime应设置为08/01/2011 16:00 GMT -4。

但是我只是回到相同的startTime而没有考虑偏移,这是上面例子中的08/01/2011 20:00。

我在这里遇到错误的想法,有一种感觉它与setDateFormat:参数有关吗?

THX

1 个答案:

答案 0 :(得分:1)

您需要使用格式化程序吗?这样的事情怎么样:

NSInteger offsetSecs = [startTimeOffset intValue] * 60 * 60;
NSDate *theDate = [NSDate dateWithTimeIntervalSince1970:(startTime + offsetSecs)];