web-dev-qa-db-ja.com

NSDateをUnixタイムスタンプのiPhone SDKに変換する方法は?

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

142
neha

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

- (NSTimeInterval)timeIntervalSince1970
267
BAndonovski

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];
69
progrmr

この方法で、日付からUNIXタイムスタンプ日付を作成できます。

NSTimeInterval timestamp = [[NSDate date] timeIntervalSince1970];
26
- (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時間に変換します。

9
Vicky

Swift

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)
    
6
Suragch

私の好ましい方法は単純です:

NSDate.date.timeIntervalSince1970;
5
Alex

これらの時間をデータベースに保存するか、サーバー経由で送信する場合は、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];  
}
5
aahsanali

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

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

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

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

4
Tapan Thaker
 [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

1
user1105951

文字列としてタイムスタンプが必要な場合。

time_t result = time(NULL);                
NSString *timeStampString = [@(result) stringValue];
0
nanjunda