如何将NSDate转换为unix时间戳iphone sdk?

时间:2010-06-08 12:03:31

标签: ios iphone nsdate unix-timestamp

如何将NSDate转换为Unix时间戳?我读了很多相反的帖子。但我找不到与我的问题有关的任何内容。

10 个答案:

答案 0 :(得分:265)

我相信这是你正在寻找的NSDate选择器:

- (NSTimeInterval)timeIntervalSince1970

答案 1 :(得分:69)

Unix timestamp是自1970年1月1日00:00:00以来的秒数。它由类型time_t表示,它通常是带符号的32位整数类型(长或INT)。

iOS为NSDate对象提供-(NSTimeInterval)timeIntervalSince1970,返回自1970年1月1日格林威治标准时间00:00:00起的秒数.NSTimeInterval是双浮点类型,因此您可以获得秒和分数。< / p>

由于它们都具有相同的引用(午夜1Jan1970 UTC)并且都在几秒内转换很容易,将NSTimeInterval转换为time_t,根据您的需要进行舍入或截断:

time_t unixTime = (time_t) [[NSDate date] timeIntervalSince1970];

答案 2 :(得分:26)

您可以通过以下方式创建一个unix时间戳日期:

NSTimeInterval timestamp = [[NSDate date] timeIntervalSince1970];

答案 3 :(得分:9)

- (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时间。

答案 4 :(得分:6)

夫特

更新了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)
    

答案 5 :(得分:5)

如果您想将这些时间存储在数据库中或通过服务器发送...最好是使用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];  
}

答案 6 :(得分:5)

我首选的方法是:

NSDate.date.timeIntervalSince1970;

答案 7 :(得分:4)

根据@kexik的建议使用UNIX时间函数如下:

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

。根据我的经验 - 不要使用timeIntervalSince1970,它会给出纪元时间戳 - 你在GMT后面的秒数。

曾经有[[NSDate date] timeIntervalSince1970]的错误,它用于根据手机的时区添加/减去时间,但现在似乎已经解决了。

答案 8 :(得分:1)

 [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

第二个unixtime 1532278070.461380

第三unixtime 1532278070

答案 9 :(得分:0)

如果您需要时间戳作为字符串。

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