我試過一個實驗,因爲我需要能夠在我正在處理的應用程序中生成unix時間戳(自1970年以來)。NSDate dateWithTimeIntervalSince1970不返回GMT/UTC時間
NSLog(@"Getting timeIntervalSince1970");
double theLoggedInTokenTimestampDateEpochSeconds = [[NSDate date] timeIntervalSince1970];
這應(自1970年1月1日秒)格林尼治標準已經返回劃時代秒(自1970年)。然而,在週一在8月15日九點54分30秒2011在進行實驗時,它返回1313427270.504315
測試這與我的Mac OS終端一個簡單的Perl的一行,我得到: perl -e 'print scalar(localtime(1313427270))'
返回週一八月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?
THX
'1313427270.504315'是自1970年1月1日以來的秒數,格林威治標準時間,這是一個不依賴於你是哪個時區的絕對度量。它對應于格林尼治標準時間的「2011-08-15 16:54:30」和加州的「2011-08-15 09:54:30」。兩者都是*同一時刻*的不同表示。 – albertamg