Ios 何时为NSDateFormatter设置NSLocale?

Ios 何时为NSDateFormatter设置NSLocale?,ios,nsdate,nsdateformatter,nslocale,Ios,Nsdate,Nsdateformatter,Nslocale,在我的应用程序中,在将日期插入数据库之前,我使用以下代码将字符串转换为日期 然而,对于英国的用户,该代码失败,他们将地区设置为英国,时区设置为伦敦 这适用于美国的用户,因为他们的语言环境是en_US。也就是说,这段代码适用于en_US语言环境,但不适用于en_GB语言环境 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; [dateFormatter setLocale:[NSLocale currentLocale]

在我的应用程序中,在将日期插入数据库之前,我使用以下代码将字符串转换为日期

然而,对于英国的用户,该代码失败,他们将地区设置为英国,时区设置为伦敦

这适用于美国的用户,因为他们的语言环境是en_US。也就是说,这段代码适用于en_US语言环境,但不适用于en_GB语言环境

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
[dateFormatter setLocale:[NSLocale currentLocale]];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T1'HH-mm-ss-SSS"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]]; //doing this as timestamp stored in server is based on UTC, hence I'm using UTC instead of systemTimeZone
 date = [dateFormatter dateFromString:theDate];
传递的字符串是:
2014-6-26T121-21-6-000

如果我按如下方式设置区域设置,而不是为世界各地的所有用户设置currentLocale:

[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
那么代码就可以工作了,但我想知道这是否会在将来导致任何问题

为什么我们需要设置locale属性来转换日期


为什么在我的情况下,
currentLocale
失败,而不是
en_-US
区域设置,即使日期格式匹配正确?

无论何时处理ISO 8601或RFC 3339日期(即与web服务交换的日期和/或在某些数据存储中存储为字符串),请使用
en_-US-POSIX
。看

或者一个人可以使用,你不必处理这种愚蠢的语言环境。例如

NSString *string = @"2014-06-26T12:21:06.000Z";

NSISO8601DateFormatter *formatter = [[NSISO8601DateFormatter alloc] init];
formatter.formatOptions = NSISO8601DateFormatWithInternetDateTime | NSISO8601DateFormatWithFractionalSeconds;

NSDate *date = [formatter dateFromString:string];
此外,对于ISO 8601和RFC 3339日期时间字符串的标准表示形式,您通常会使用类似
2014-06-26T12:21:06.000Z的格式,其中:

  • 时间不到24小时
  • 数字是零填充的
  • 小时、分钟和秒之间的分隔符是
  • 秒和毫秒之间的分隔符是
    ;及
  • 您通常会在字符串末尾添加
    Z
    ,以明确指定时间字符串的单位为GMT/UTC/Zulu

哦,我真傻,竟然在不知道为什么的情况下注释掉en_US_POSIX并使用currentLocale!谢谢你的快速回复!我认为它是'T1'21,21是小时表示HH。除非你对
T1
有什么理由,否则我会丢掉它,只使用
T
T1
将是一个混乱的来源。感谢您的详细解释!真的很感激!