私が作業しているアプリでUNIXのタイムスタンプ(1970年以降)を生成できる必要があるため、実験を試みました。NSDate dateWithTimeIntervalSince1970 GMT/UTC時間を返さない
NSLog(@"Getting timeIntervalSince1970");
double theLoggedInTokenTimestampDateEpochSeconds = [[NSDate date] timeIntervalSince1970];
このはGMT(1970年1月1日からの秒)で(1970年以降)返さエポック秒をしたはずです。 9時54分30秒月8月15日にで2011の実験を行う際しかし、それは私のMac OSのターミナル上で、単純なperlのワンライナーでこのテスト1313427270.504315
を返された、私が取得: perl -e 'print scalar(localtime(1313427270))'
月8月を返します15 09:54:30 2011 ...
私がSF Bay Areaにいて、自分のローカルタイムゾーンが "Cupertino"に設定されているのは明らかです。何が起こっていて、どうすれば修正できますか?私はあなたのタイムスタンプが等しい、有効な時間帯に送信される時間のどこにでもどこでも通信するので、私のアプリがサーバーに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日からの秒数で、これはあなたがどのタイムゾーンに依存しない絶対的な尺度です。 GMTでは2011年8月15日16時54分30秒、カリフォルニアでは2011年8月15日09時54分30秒に相当します。どちらも*同じインスタント*の異なる表現です。 – albertamg