2

这是我的代码:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];

NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:1275822000000+0000];

// 字符串是json解析字符串

NSString *formattedDateString = [dateFormatter stringFromDate:date];
NSLog(@"formattedDateString: %@", formattedDateString);

输出为 Dec 20,5828963

但我要求的输出是 2010 年 6 月 6 日

如何更改我的代码以获得正确的输出?

4

3 回答 3

2

首先:您的时间戳看起来像 Java 时间戳,但它有几个额外的零(其中 4 个正好)。您必须将其转换为 Unix 时间戳,即自 Unix 纪元以来的秒数(与 Java 相反,它是自 Unix 纪元以来的毫秒数)。

dateWithTimeIntervalSinceReferenceDate:不接受 Unix 时间戳,但转换很简单:

double timestampFromService = 12758220000000000;
NSDate *date = [NSDate dateWithTimeIntervalSince1970:
    (timestampFromService*1.0e-7)];
于 2012-05-24T12:50:19.497 回答
2

如果您想从某个幻数收到 2010 年 6 月 6 日,请使用以下命令:

NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:297475822];

出于某种原因,您的数字非常大,正如@wrock 提到的那样,它乘以 1000 万,因此为了获得正确的值,您可以使用 dateWithTimeIntervalSince1970 并将其除以 1000 万

NSDate *date = [NSDate dateWithTimeIntervalSince1970:1275822000];
于 2012-05-24T12:38:18.370 回答
0

以可读的方式使用日期:

NSDate *myDate = [NSDate dateWithString:@"2010-06-06 00:00:00"];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];

NSString *formattedDateString = [dateFormatter stringFromDate:myDate];
NSLog(@"formattedDateString: %@", formattedDateString);
于 2012-05-24T12:34:10.423 回答