NSDate
をUnixタイムスタンプに変換する方法は?私は逆のことをする多くの投稿を読みました。しかし、質問に関連するものは何も見つかりません。
これがあなたが探しているNSDateのセレクタだと思います:
- (NSTimeInterval)timeIntervalSince1970
nixタイムスタンプ は、1970年1月1日00:00:00 UTCからの秒数です。タイプ time_t で表され、通常は符号付き32ビット整数です。タイプ(longまたはint)。
iOSは、NSDateオブジェクトに対して -(NSTimeInterval)timeIntervalSince197 を提供し、1970年1月1日00:00:00 GMT以降の秒数を返します。NSTimeIntervalは二重浮動小数点型であるため、二番目の。
どちらも同じ参照(UTC 1Jan1970 UTC午前0時)であり、秒単位で変換が簡単なので、必要に応じてNSTimeIntervalをtime_tに変換し、丸めるか切り捨てます:
time_t unixTime = (time_t) [[NSDate date] timeIntervalSince1970];
この方法で、日付からUNIXタイムスタンプ日付を作成できます。
NSTimeInterval timestamp = [[NSDate date] timeIntervalSince1970];
- (void)GetCurrentTimeStamp
{
NSDateFormatter *objDateformat = [[NSDateFormatter alloc] init];
[objDateformat setDateFormat:@"yyyy-MM-dd"];
NSString *strTime = [objDateformat stringFromDate:[NSDate date]];
NSString *strUTCTime = [self GetUTCDateTimeFromLocalTime:strTime];//You can pass your date but be carefull about your date format of NSDateFormatter.
NSDate *objUTCDate = [objDateformat dateFromString:strUTCTime];
long long milliseconds = (long long)([objUTCDate timeIntervalSince1970] * 1000.0);
NSString *strTimeStamp = [Nsstring stringwithformat:@"%lld",milliseconds];
NSLog(@"The Timestamp is = %@",strTimestamp);
}
- (NSString *) GetUTCDateTimeFromLocalTime:(NSString *)IN_strLocalTime
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *objDate = [dateFormatter dateFromString:IN_strLocalTime];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
NSString *strDateTime = [dateFormatter stringFromDate:objDate];
return strDateTime;
}
注:-タイムスタンプはUTCゾーンである必要があるため、ローカル時間をUTC時間に変換します。
Swift 3に更新
// current date and time
let someDate = Date()
// time interval since 1970
let myTimeStamp = someDate.timeIntervalSince1970
注
timeIntervalSince1970
は、 TimeInterval
を返します。これはDouble
のタイプエイリアスです。他の方法で行きたい場合は、次のことを行うことができます。
let myDate = Date(timeIntervalSince1970: myTimeStamp)
私の好ましい方法は単純です:
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
文字列としてタイムスタンプが必要な場合。
time_t result = time(NULL);
NSString *timeStampString = [@(result) stringValue];