日期格式很奇怪

时间:2014-02-06 01:18:15

标签: ios objective-c nsdate

我有一个如下所示的日期字符串:

1391640679661

当我使用此代码时:

NSString *seconds = @"1391640679661";
NSDate *date = [NSDate dateWithTimeIntervalSince1970:[seconds doubleValue]];

我最终得到了这个:

46069-05-03 07:27:41 +0000

那么这里发生了什么?这是我不考虑的特定日期格式吗?或者我做错了什么?

2 个答案:

答案 0 :(得分:2)

Apple自己的api将根据您的需要为您完成所有艰苦的工作。
如果您想获得单独的组件,您可以采用以下方法。

NSTimeInterval theTimeInterval = 1391640679661;

// Get the system calendar
 NSCalendar *sysCalendar = [NSCalendar currentCalendar];

// Create the NSDates
NSDate *date1 = [[NSDate alloc] init];
NSDate *date2 = [[NSDate alloc] initWithTimeInterval:theTimeInterval sinceDate:date1]; 

// Get conversion to months, days, hours, minutes
unsigned int unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit;

NSDateComponents *conversionInfo = [sysCalendar components:unitFlags fromDate:date1  toDate:date2  options:0];

NSLog(@"Conversion: %dmin %dhours %ddays %dmoths",[conversionInfo minute], [conversionInfo hour], [conversionInfo day], [conversionInfo month]);

答案 1 :(得分:1)

要将时间戳字符串转换为NSDate,您需要将timestamp double值分割为1000,然后调用dateWithTimeIntervalSince1970:

NSString *timestamp = @"1391640679661";
double seconds = [timestamp doubleValue]/1000.0;
NSDate *date = [NSDate dateWithTimeIntervalSince1970:seconds];

结果是:

2014-02-05 22:51:19 +0000