如何将 NSDate 转换成 Unix 时间戳 iphone sdk?

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

145727 次浏览

我相信这就是你们要找的国家自由民主党候选人:

- (NSTimeInterval)timeIntervalSince1970

Unix 时间戳是自协调世界时1970年1月1日00:00:00以来的秒数。它由类型 时间表示,时间通常是有符号的32位整数类型(long 或 int)。

IOS 为 NSDate 对象提供 从1970年开始,它返回自1970年1月1日00:00:00 GMT 以来的秒数。NSTimeInterval 是一个双浮点类型,因此可以获得秒和秒的分数。

因为它们都有相同的引用(1970年1月1日午夜) ,而且都是以秒为单位,所以转换很容易,根据需要将 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 时间戳日期:

NSTimeInterval timestamp = [[NSDate date] timeIntervalSince1970];

我更喜欢的方式很简单:

NSDate.date.timeIntervalSince1970;

根据@kexik 的建议,使用 UNIX time 函数如下:

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

.根据我的经验——不要使用 timeIntervalSince1970,它给出了时间戳——你落后于格林尼治标准时间的秒数。

曾经有一个错误[[ 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)
    

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

time_t result = time(NULL);
NSString *timeStampString = [@(result) stringValue];
 [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

第二单位时间1532278070.461380

第三个 Unixtime 1532278070