【问题标题】:NSDateFormatter won't parse dates using locale settings?NSDateFormatter 不会使用语言环境设置解析日期?
【发布时间】:2010-09-20 17:57:33
【问题描述】:

我正在尝试使用用户的日期偏好来解析日期

[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4];
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
NSDate *date = [ dateFormatter dateFromString:@"7/4/2008" ];
NSLog(@"string from date %@: %@ for locale %@", date, [dateFormatter stringFromDate:date], [[dateFormatter locale] localeIdentifier]);

当我将我的地区(在国际系统首选项中)设置为美国时,它会打印:

2008-08-14 20:20:31.117 Date Difference17226:10b string from date 2008-07-04 00:00:00 -0400: 7/4/08 for locale en_US

当我所在的地区是英国时,它会打印:

2008-08-14 20:19:23.441 Date Difference17199:10b string from date 2008-04-07 00:00:00 -0400: 07/04/2008 for locale en_GB

看起来 NSDateFormatter 对区域的变化不敏感。不过请注意,日期的原始打印会随着区域正确切换。

我必须做些什么才能让 NSDateFormatter 尊重区域设置?

【问题讨论】:

    标签: objective-c cocoa macos internationalization date


    【解决方案1】:

    这看起来是正确的。在第一个输出示例中,格式化的日期字符串是 7/4/200。第二个是 07/04/2008。

    您期望有什么不同?

    如果您没有更改您对英国首选日期格式的格式偏好,我相信它默认为 MM/DD/YYYY,并在小于 10 的月份和天数中使用前导零。

    【讨论】:

      【解决方案2】:

      看起来 NSDateFormatter 对区域的变化不敏感。

      不,它正在双向使用语言环境。

      您可以通过查看日期的描述(NSLog 格式中的第一个 %@)来了解格式化程序如何解释日期。
      如果地区为美国,格式化程序会将日期解释为 2008-07-04(7 月 4 日)
      区域为 GB,格式化程序将日期解释为 2008-04-07 (April 7)

      然后,您要求同一地区的同一格式化程序显示该日期。
      使用美国格式的 7 月 4 日是 07/04/2008 (MM/DD/YYYY)。
      使用 GB 格式的 4 月 7 日是 07/04/2008 (DD/MM/YYYY)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多