我正在使用日历并发现 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 中没有其他提及?