NSDateFormatter不同的基准年iOS 5和iOS 6解析一年中的一天

时间:2013-03-05 19:47:58

标签: ios5 ios6 nsdateformatter

我正在使用日历,并发现NSDateFormatter的问题在iOS 5.0和iOS 6.0上表现不同。 我尝试为一年中的某些日子创建日期。 例如,我想知道哪一个是今年的第59天。

为了达到这个目的,我使用NSDateFormatter并将其日期格式设置为“DDD”(一年中的三位数日),然后尝试解析包含该日期的字符串。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// just gettting rid of the timezone
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[formatter setDateFormat:@"DDD"];

NSMutableString *outPutString = [NSMutableString stringWithString:@"\n"];
for (int i = 1; i <= 366; i++)
{
    NSString *dayOfTheYearString = [NSString stringWithFormat:@"%i", i];
    [outPutString appendFormat:@"%3i: %@ string:(%@)\n", i, [formatter dateFromString:dayOfTheYearString], dayOfTheYearString];
}

NSLog(@"%@", outPutString);
[formatter release];

在iOS 5.0 Simulator上运行此功能正常。控制台打印:

001: 1970-01-01 00:00:00 +0000 string:(1)
002: 1970-01-02 00:00:00 +0000 string:(2)
003: 1970-01-03 00:00:00 +0000 string:(3)
004: 1970-01-04 00:00:00 +0000 string:(4)
005: 1970-01-05 00:00:00 +0000 string:(5)
[...]
058: 1970-02-27 00:00:00 +0000 string:(58)
059: 1970-02-28 00:00:00 +0000 string:(59)
060: 1970-03-01 00:00:00 +0000 string:(60)
061: 1970-03-02 00:00:00 +0000 string:(61)
[...]

但在iOS 6.0上,控制台会打印:

001: 2000-01-01 00:00:00 +0000 string:(1)
002: 2000-01-02 00:00:00 +0000 string:(2)
003: 2000-01-03 00:00:00 +0000 string:(3)
004: 2000-01-04 00:00:00 +0000 string:(4)
005: 2000-01-05 00:00:00 +0000 string:(5)
[...]
058: 2000-02-27 00:00:00 +0000 string:(58)
059: 2000-02-28 00:00:00 +0000 string:(59)
060: 2000-02-29 00:00:00 +0000 string:(60)
061: 2000-03-01 00:00:00 +0000 string:(61)
[...]

这是我的主要问题。由于2000年是闰年,我的以下计算结果在iOS 5.0和iOS 6.0之间有所不同。

我知道在要求第x天时,有必要了解闰年的年份。但如果我没有提供关于这一年的任何信息,我预计结果日期是在1970年!

那么如何强制NSDateFormatter在1970年创建(全球标准使用)日期,而在iOS 6.0中没有提及?

1 个答案:

答案 0 :(得分:0)

您可以在传递日期时指定基准年。而不是使用

[formatter setDateFormat:@"DDD"];

使用

[formatter setDateFormat:@"yyyy-DDD"];

然后,将您的日期字符串更改为

NSString *dayOfTheYearString = [NSString stringWithFormat:@"1970-%i", i];