2011-08-15 5 views
0

私が作業しているアプリで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を

+3

「1313427270.504315」は1970年1月1日からの秒数で、これはあなたがどのタイムゾーンに依存しない絶対的な尺度です。 GMTでは2011年8月15日16時54分30秒、カリフォルニアでは2011年8月15日09時54分30秒に相当します。どちらも*同じインスタント*の異なる表現です。 – albertamg

答えて

4

それは表面上のことのように見えるかもしれないが、私は、最初の関数は実際には間違っているとは思いません。 timeIntervalSince1970から受け取った時間間隔はではありません。はGMTで時間間隔を返します。むしろ、今から1970年1月1日00:00:00(GMT)までの時間間隔を戻しています。それはニンピクのように見えるかもしれませんが、重要です。間隔の値は、固定された時点からのスカラー秒数に過ぎません。間隔自体はGMTではなく、固定基準点だけです。

私はperlを知らないのですが、現地時間の文書をすばやく検索しました。いつでも標準の日付タイプを現地時間に変換して印刷するようです。つまり、固定小数点を記述する時間間隔は、その時点でローカル時間に変換されます。コマンドラインから表示すると、もう一度ローカルタイムを取得しています。だからあなたの現地時間に翻訳された絶対時間が私が見たいと思っているものです。

サービスがUTC時間をどのくらい受け取ることが予想されるかによって、時間間隔の値は正常に動作する可能性があります。あなたのターミナルチェック以外のものに基づいていないという証拠はありますか?

+2

そう、それは私の悪かった。私はスカラーを使用していた(localtime(1313427270))。私はスカラーを使うべきだった(gmtime(1313427270))。それは私にそのタイムスタンプのperl GMTバージョンを与えてくれたでしょう。ありがとう、ティム! – Jann

関連する問題