150

NSDateをUnixタイムスタンプに変換するには? 私は逆のことをする多くの投稿を読みました。しかし、私の質問に関連するものは何も見つかりません。

4

10 に答える 10

276

これがあなたが探しているNSDateのセレクターだと思います:

- (NSTimeInterval)timeIntervalSince1970
于 2010-06-08T12:06:09.933 に答える
71

Unix タイムスタンプは、1970 年 1 月 1 日の 00:00:00 UTC からの秒数です。通常は符号付き 32 ビット整数型 (long または int) であるtime_t型で表されます。

iOS は、1970 年 1 月 1 日 00:00:00 GMT からの秒数を返す NSDate オブジェクトに-(NSTimeInterval)timeIntervalSince1970を提供します。

どちらも同じ参照 (1970 年 1 月 1 日午前 0 時 UTC) を持ち、どちらも秒単位であるため、変換は簡単です。必要に応じて、NSTimeInterval を time_t に変換し、丸めたり切り捨てたりします。

time_t unixTime = (time_t) [[NSDate date] timeIntervalSince1970];
于 2010-06-08T12:34:17.930 に答える
7

これらの時間をデータベースに保存したり、サーバー経由で送信したりする場合は、Unix タイムスタンプを使用するのが最善です。これを取得するための小さなスニペットを次に示します。

+ (NSTimeInterval)getUTCFormateDate{

    NSDateComponents *comps = [[NSCalendar currentCalendar] 
                               components:NSDayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit 
                               fromDate:[NSDate date]];
    [comps setHour:0];
    [comps setMinute:0];    
    [comps setSecond:[[NSTimeZone systemTimeZone] secondsFromGMT]];

    return [[[NSCalendar currentCalendar] dateFromComponents:comps] timeIntervalSince1970];  
}
于 2011-10-21T11:43:04.440 に答える
5

以下のようにUNIX時間関数を使用した@kexikの提案に従って:

  time_t result = time(NULL);
  NSLog([NSString stringWithFormat:@"The current Unix epoch time is %d",(int)result]);

.私の経験によると、 timeIntervalSince1970 を使用しないでください。エポックタイムスタンプが表示されます-GMTから遅れている秒数。

以前は [[NSDate date]timeIntervalSince1970] にバグがあり、電話のタイムゾーンに基づいて時間を加算/減算していましたが、現在は解決されているようです。

于 2014-03-27T21:09:04.050 に答える
3
 [NSString stringWithFormat: @"first unixtime is %ld",message,(long)[[NSDate date] timeIntervalSince1970]];

 [NSString stringWithFormat: @"second unixtime is %ld",message,[[NSDate date] timeIntervalSince1970]];

 [NSString stringWithFormat: @"third unixtime is %.0f",message,[[NSDate date] timeIntervalSince1970]]; 

最初の unixtime 1532278070

2 番目の unixtime 1532278070.461380

3 番目の unixtime 1532278070

于 2018-07-22T17:47:08.593 に答える