1

我正在使用日历并发现 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 模拟器上运行它可以正常工作。控制台打印:

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 中没有其他提及?

4

1 回答 1

0

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

[formatter setDateFormat:@"DDD"];

利用

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

然后,将您的年份字符串更改为

NSString *dayOfTheYearString = [NSString stringWithFormat:@"1970-%i", i];
于 2013-03-05T20:02:49.587 回答