我尝试了一个实验,因为我需要能够在我正在开发的应用程序中生成一个 unix 时间戳(自 1970 年以来)。
NSLog(@"Getting timeIntervalSince1970");
double theLoggedInTokenTimestampDateEpochSeconds = [[NSDate date] timeIntervalSince1970];
这应该在 GMT(自 1970 年 1 月 1 日以来的秒数)中返回纪元秒数(自 1970 年以来)。但是,在 2011 年 8 月 15 日星期一 09:54:30 进行实验时,它返回 1313427270.504315
在我的 Mac OS 终端上用一个简单的 perl 单行程序对此进行测试,我得到:
perl -e 'print scalar(localtime(1313427270))'
它返回Mon Aug 15 09:54:30 2011 ...
当我在旧金山湾区并且我的本地时区设置为“库比蒂诺”时,这显然不是格林威治标准时间。请问这是怎么回事,我该如何解决?我需要让我的应用程序在通信时将 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];
这很好用——在用户的时区和语言环境中显示更正的时间......所以我知道它正在为传入的时间戳完成。那么,第一个阻止它处于 GMT 状态的函数(timeIntervalSince190)我做错了什么?
谢谢