iOS NSDateFormatter即使是UTC也需要NSLocale

时间:2015-09-08 13:09:59

标签: ios nsdate nsdateformatter nstimezone nslocale

我怀疑我无法理解为什么会这样,我呼吁这个网站的众神:)

我的日期是这样的:

"1982-01-01T00:00:00Z" 

因为我正在显示服务器发送的任何内容(我知道,客户要求,而不是良好做法......),我强迫设备使用以下方法使TimeZone简化,无需错误检查,未进行优化,以及所有这些事情:

+ (NSString *) yearStringFromDate: (NSDate *) date
{
    NSDateFormatter *formatter = [NSDateFormatter new];
    [formatter setDateFormat:@"YYYY"];
    [formatter setTimeZone:[self timezoneForSIHF]];

    return [formatter stringFromDate:date];    
}

这应该是UTC,但是如果我没有设置我正在获得的语言环境,并且有时候不正确的年份。因此,通过添加这个,我得到所有情况的年份正确:

[formatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];

有关详细信息,我正在使用不同语言(en,de,es)在真实设备和模拟器中进行测试。

  • 这是为什么?
  • 为什么即使timeZone正确,语言环境也会影响日期?
  • 为什么有时会使用某些日期,有时却不是? 例如,1982年没有设置区域设置,1981年,如果我将它设置为1982年,则返回。这种情况不会发生在1980年,在1980年(或1987年,或......)的两种情况下都会返回。

提前感谢您的所有回复:D 干杯!

1 个答案:

答案 0 :(得分:2)

使用yyyy代替YYYY

Reference