NSDate dateWithTimeIntervalSince1970不返回GMT / UTC时间

我尝试了一个实验,因为我需要能够在我正在工作的应用程序中生成一个unix时间戳(自1970年以来)。

NSLog(@"Getting timeIntervalSince1970"); double theLoggedInTokenTimestampDateEpochSeconds = [[NSDate date] timeIntervalSince1970]; 

应该已经在格林尼治标准时间(1970年1月1日以来的秒)内返回了纪元秒(自1970年以来)。 但是,在2011年8月15日星期一09:54:30进行实验时,返回1313427270.504315

在Mac OSterminal上用一个简单的perl单行testing,得到: perl -e 'print scalar(localtime(1313427270))' ,它返回星期一8月15日09:54:30 2011

这显然不是格林威治时间,当我在SF湾区,当地时区设置为“库比蒂诺”。 怎么回事,请问我该如何解决? 我需要让我的应用程序在通信时向服务器发送UTC时间,所以无论用户在什么时间时间戳都会在一个相同的有效时区内发送。

在我的应用程序的另一部分,当用户从服务器请求数据,它获取它以UTC发送 ​​- 将其转换为显示如下:

 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setLocale:[NSLocale currentLocale]]; [dateFormatter setTimeZone:nil]; [dateFormatter setDateFormat:@"yyyyMMdd"]; NSDate *conversationDate = [NSDate dateWithTimeIntervalSince1970:[theConversationTimeStampString intValue]]; NSString *conversationDateString = [dateFormatter stringFromDate:conversationDate]; [dateFormatter release]; 

而且这个工程很漂亮 – 在用户的时区和区域显示更正的时间…所以我知道正在完成传入的时间戳。 那么,我在做什么错误的第一个函数(timeIntervalSince190),阻止它在GMT?

谢谢

我不认为第一个函数实际上是错误的,尽pipe它可能看起来像表面上。 从timeIntervalSince1970接收的时间间隔不是以GMT格式返回时间间隔。 而是从现在到1970年1月1日00:00:00 GMT之间的时间间隔。 这可能看起来像一个挑剔的,但它是重要的:间隔值只是一个固定的时间点以来的标量秒数。 时间间隔本身不是GMT,只有固定的参考点是。

我不知道perl,但我做了本地时间的文档快速search,它似乎需要任何时间和打印转换为当地时间的标准datetypes。 这意味着描述一个固定时间点的时间间隔将被转换回到当时的时间点。 当你从你的命令行显示它时,你将再次获得本地时间。 所以看到绝对时间翻译成当地时间是我期望看到的。

根据您的服务期望接收UTC时间的精确度,您的时间间隔值可能正常工作。 你有证据certificate它不是基于你的terminal检查以外的东西吗?