neh*_*eha 143 iphone nsdate unix-timestamp ios
如何将转换NSDate
为Unix时间戳?我读了很多相反的帖子.但我找不到任何与我的问题相关的内容.
BAn*_*ski 268
我相信这是你正在寻找的NSDate的选择器:
- (NSTimeInterval)timeIntervalSince1970
Run Code Online (Sandbox Code Playgroud)
pro*_*rmr 69
甲Unix时间戳是因为00:00:00 UTC 1970年1月1日,它是由式所代表的秒数time_t的,它通常是一个带符号的32位整数类型(长或INT).
iOS 为NSDate对象提供了- (NSTimeInterval)timeIntervalSince1970,它返回自1970年1月1日格林威治标准时间00:00:00以来的秒数.NSTimeInterval是一个双浮点类型,因此您可以获得秒和分数秒.
由于它们都具有相同的引用(午夜1Jan1970 UTC)并且都在几秒内转换很容易,将NSTimeInterval转换为time_t,根据您的需要进行舍入或截断:
time_t unixTime = (time_t) [[NSDate date] timeIntervalSince1970];
Run Code Online (Sandbox Code Playgroud)
Pet*_*Put 26
您可以通过以下方式从日期创建unix时间戳日期:
NSTimeInterval timestamp = [[NSDate date] timeIntervalSince1970];
Run Code Online (Sandbox Code Playgroud)
- (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;
}
Run Code Online (Sandbox Code Playgroud)
注意: - 时间戳必须是UTC区域,因此我将本地时间转换为UTC时间.
针对Swift 3进行了更新
// current date and time
let someDate = Date()
// time interval since 1970
let myTimeStamp = someDate.timeIntervalSince1970
Run Code Online (Sandbox Code Playgroud)
笔记
timeIntervalSince1970
返回TimeInterval
,这是一个类型Double
.如果你想走另一条路,你可以做以下事情:
let myDate = Date(timeIntervalSince1970: myTimeStamp)
Run Code Online (Sandbox Code Playgroud)如果要将这些时间存储在数据库中或通过服务器发送...最好是使用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];
}
Run Code Online (Sandbox Code Playgroud)
根据@kexik的建议,使用 UNIX 时间函数如下:
time_t result = time(NULL);
NSLog([NSString stringWithFormat:@"The current Unix epoch time is %d",(int)result]);
Run Code Online (Sandbox Code Playgroud)
根据我的经验 - 不要使用 timeIntervalSince1970 ,它给出纪元时间戳 - 落后于 GMT 的秒数。
[[NSDate date]timeIntervalSince1970] 曾经有一个错误,它曾经根据手机的时区添加/减去时间,但现在似乎已解决。
归档时间: |
|
查看次数: |
140444 次 |
最近记录: |