作業中のアプリで UNIX タイムスタンプ (1970 年以降) を生成できるようにする必要があるため、実験を試みました。
NSLog(@"Getting timeIntervalSince1970");
double theLoggedInTokenTimestampDateEpochSeconds = [[NSDate date] timeIntervalSince1970];
これは、エポック秒 (1970 年以降) を GMT (1970 年 1 月 1 日以降の秒数) で返す必要があります。ただし、2011 年 8 月 15 日月曜日 09:54:30 に実験を行うと、1313427270.504315 が返されました。
Mac OS ターミナルで単純な perl ワンライナーを使用してこれをテストすると、次のようになり
ます。 Mon Aug 15 09:54:30 2011 ...perl -e 'print scalar(localtime(1313427270))'
を返します
私がSFベイエリアにいて、ローカルタイムゾーンが「クパチーノ」に設定されている場合、これは明らかにGMT時間ではありません. 何が起こっていますか、どうすれば修正できますか? アプリが通信するときに 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 にならないようにするために何が間違っているのでしょうか?
どうも