如何使用dateformatter方法获取正确的日期?

时间:2012-05-24 12:27:55

标签: ios xcode4.2 nsdateformatter

这是我的代码:

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日

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

3 个答案:

答案 0 :(得分:2)

如果你想从2010年6月6日收到某个幻数,请使用:

NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:297475822];

出于某种原因,你的数字非常大,正如@wrock提到的那样,它会增加1000万,所以为了获得正确的价值你可以使用dateWithTimeIntervalSince1970并将它除以1000万

NSDate *date = [NSDate dateWithTimeIntervalSince1970:1275822000];

答案 1 :(得分:2)

首先:您的时间戳看起来像一个Java时间戳,但它有一些额外的零(其中4个完全正确)。你必须将它转换为Unix时间戳,这是自Unix纪元以来的秒数(而不是Java,这是自Unix纪元以来的毫秒数)。

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

double timestampFromService = 12758220000000000;
NSDate *date = [NSDate dateWithTimeIntervalSince1970:
    (timestampFromService*1.0e-7)];

答案 2 :(得分: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);