iOS NSDateFormatter 需要 NSLocale 即使它是 UTC
iOS NSDateFormatter needs NSLocale even it's UTC
疑惑不明白为什么会这样,求助本站大神:)
我有个约会是这样的:
"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)的真实设备和模拟器中进行测试。
- 这是为什么?
- 为什么即使时区正确,语言环境也会影响日期?
- 为什么有时可以处理某些日期,有时却不能?
例如,1982 在没有设置区域设置的情况下返回 1981,如果我将其设置为 1982。1980 不会发生这种情况,在两种情况下都会返回 1980(或 1987,或...)
提前感谢您的所有回复:D
干杯!
使用 yyyy
而不是 YYYY
。
将 ISO 8601/RFC 3339 日期字符串转换为 NSDate
对象时,如果用户未使用公历,则使用 en_US_POSIX
语言环境。参见 Technical Q&A 1480。
但是,在您的情况下,您正试图从日期对象中获取年份字符串表示形式。在那种情况下,您可能不需要 en_US_POSIX
。仅当您需要使用公历时才需要这样做,而不管设备当前使用的是哪种日历。
正如其他人所指出的,您应该使用 yyyy
而不是 YYYY
。前 returns 历年。后者 returns 年份,在基于 "Week of Year" 的日历中,可能并不总是与日历年的值相同。
请参阅 date formatting patterns 以了解对比 y
和 Y
的讨论。
顺便说一下,如果确实需要日期的年份成分,也可以使用NSCalendar
的NSDateComponents
相关方法。
疑惑不明白为什么会这样,求助本站大神:)
我有个约会是这样的:
"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)的真实设备和模拟器中进行测试。
- 这是为什么?
- 为什么即使时区正确,语言环境也会影响日期?
- 为什么有时可以处理某些日期,有时却不能? 例如,1982 在没有设置区域设置的情况下返回 1981,如果我将其设置为 1982。1980 不会发生这种情况,在两种情况下都会返回 1980(或 1987,或...)
提前感谢您的所有回复:D 干杯!
使用 yyyy
而不是 YYYY
。
将 ISO 8601/RFC 3339 日期字符串转换为 NSDate
对象时,如果用户未使用公历,则使用 en_US_POSIX
语言环境。参见 Technical Q&A 1480。
但是,在您的情况下,您正试图从日期对象中获取年份字符串表示形式。在那种情况下,您可能不需要 en_US_POSIX
。仅当您需要使用公历时才需要这样做,而不管设备当前使用的是哪种日历。
正如其他人所指出的,您应该使用 yyyy
而不是 YYYY
。前 returns 历年。后者 returns 年份,在基于 "Week of Year" 的日历中,可能并不总是与日历年的值相同。
请参阅 date formatting patterns 以了解对比 y
和 Y
的讨论。
顺便说一下,如果确实需要日期的年份成分,也可以使用NSCalendar
的NSDateComponents
相关方法。