NSDate
をUnixタイムスタンプに変換するには? 私は逆のことをする多くの投稿を読みました。しかし、私の質問に関連するものは何も見つかりません。
10 に答える
これがあなたが探しているNSDateのセレクターだと思います:
- (NSTimeInterval)timeIntervalSince1970
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];
これらの時間をデータベースに保存したり、サーバー経由で送信したりする場合は、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];
}
以下のようにUNIX時間関数を使用した@kexikの提案に従って:
time_t result = time(NULL);
NSLog([NSString stringWithFormat:@"The current Unix epoch time is %d",(int)result]);
.私の経験によると、 timeIntervalSince1970 を使用しないでください。エポックタイムスタンプが表示されます-GMTから遅れている秒数。
以前は [[NSDate date]timeIntervalSince1970] にバグがあり、電話のタイムゾーンに基づいて時間を加算/減算していましたが、現在は解決されているようです。
[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