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

如何将一个NSDate转换成Unix时间戳? 我读过很多post,相反。 但是我没有发现任何与我的问题有关的东西。

我相信这是你正在寻找的NSDate的select:

 - (NSTimeInterval)timeIntervalSince1970 

Unix时间戳是自1970年1月1日00:00:00以来的秒数。它由typestime_t表示,通常是一个带符号的32位整数types(long或int)。

iOS为NSDate对象提供了- (NSTimeInterval)timeIntervalSince1970 ,它返回自1970年1月1日00:00:00以来的秒数。NSTimeInterval是一个双浮点types,因此您可以获得秒和小数秒。

由于他们都有相同的参考(午夜1月1970 UTC),都在几秒钟内转换很容易,将NSTimeInterval转换为time_t,四舍五入或截断取决于您的需要:

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

您可以通过以下方式从date创build一个unix时间戳date:

 int 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一个typealias。
  • 如果你想以另一种方式,你可以做到以下几点:

     let myDate = Date(timeIntervalSince1970: myTimeStamp) 

如果你想把这些时间存储在数据库中或者通过服务器发送,最好的办法是使用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]; } 

我最喜欢的方式是简单的:

 NSDate.date.timeIntervalSince1970; 

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

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

。根据我的经验 – 不要使用timeIntervalSince1970,它给出了时代的时间戳 – 你在格林尼治标准时间之后的秒数。

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

如果你需要时间戳作为一个string。

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