如何将纪元时间值转换为NSDate.例如,我使用此值:1310412600000.我在EDT时区.
当我尝试这个:
NSString *bar = [[NSDate dateWithTimeIntervalSince1970:epoch] description];
Run Code Online (Sandbox Code Playgroud)
我错了价值......
什么是好方法?我花了很多时间......
谢谢
Ste*_*HHH 30
纪元时间(也称为"Unix"和"POSIX"时间)是自1970年初以来的秒数.您可以使用此算法将纪元时间转换为NSDate:
这是我使用的代码:
// Sample string epochTime is number of seconds since 1970
NSString *epochTime = @"1316461149";
// Convert NSString to NSTimeInterval
NSTimeInterval seconds = [epochTime doubleValue];
// (Step 1) Create NSDate object
NSDate *epochNSDate = [[NSDate alloc] initWithTimeIntervalSince1970:seconds];
NSLog (@"Epoch time %@ equates to UTC %@", epochTime, epochNSDate);
// (Step 2) Use NSDateFormatter to display epochNSDate in local time zone
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss zzz"];
NSLog (@"Epoch time %@ equates to %@", epochTime, [dateFormatter stringFromDate:epochNSDate]);
// (Just for interest) Display your current time zone
NSString *currentTimeZone = [[dateFormatter timeZone] abbreviation];
NSLog (@"(Your local time zone is: %@)", currentTimeZone);
Run Code Online (Sandbox Code Playgroud)
根据文件,dateWithTimeIntervalSince1970:
运行时间为1970年1月1日格林尼治标准时间00:00.所以你应该比你真正想要的结果晚四个小时得到结果.
因此,最简单的事情 - 如果你不介意从GMT到EDT的硬编码 - 似乎是:
[[NSDate dateWithTimeIntervalSince1970:epoch] dateByAddingTimeInterval:-240]
// or:
[NSDate dateWithTimeIntervalSince1970:epoch - 240]
Run Code Online (Sandbox Code Playgroud)
虽然要消除任意常量(并且更清洁),但您可能需要以下内容:
NSTimeZone *EDTTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"EDT"];
NSInteger secondsDifferenceFromGMT =
[EDTTimeZone secondsFromGMTForDate:[NSDate dateWithTimeIntervalSince1970:0]];
NSDate *startOfEpoch =
[NSDate dateWithTimeIntervalSince1970:secondsDifferenceFromGMT];
...
NSDate *newDate = [startOfEpoch dateByAddingTimeInterval:firstInterval]; // etc
Run Code Online (Sandbox Code Playgroud)
您是否以秒为单位传递该值?
该方法接受以秒为单位的值,而不是毫秒。
归档时间: |
|
查看次数: |
14324 次 |
最近记录: |