【问题标题】:Cocoa - Localized string from NSDate, NSCalendarDateCocoa - 来自 NSDate、NSCalendarDate 的本地化字符串
【发布时间】:2009-06-18 07:01:56
【问题描述】:

我正在使用 NSDate 来获取一个字符串,例如“18 Jun 09”,代码:

NSDate *theDate = [NSDate date];
NSString *dateString = [theDate descriptionWithCalendarFormat:@"%d %b %y"
        timeZone:nil
        locale: nil];

这可行,但只会产生英文输出。我需要将输出本地化为用户的默认语言。

Cocoa(本例中为 Mac OS X 10.4、10.5)是否为这种本地化提供了便利,还是我必须为我自己的每个日期和月份名称手动本地化?

(我提供了一个语言环境,但尽管它确实提供了特定于语言环境的日期排序,但它似乎没有对日月名称进行任何本地化。)

【问题讨论】:

    标签: cocoa nsdate localization


    【解决方案1】:

    这是snippet from Apple

    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
    
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle];
    
    [dateFormatter setTimeStyle:NSDateFormatterNoStyle];
    
    NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:118800];
    
    NSString *formattedDateString = [dateFormatter stringFromDate:date];
    
    NSLog(@"formattedDateString for locale %@: %@", [[dateFormatter locale] localeIdentifier], formattedDateString);
    

    【讨论】:

    • 感谢您的帮助。不幸的是,sn-p 似乎无法正常工作。如果我将“日期”更改为 [NSDate 日期],那么无论使用哪种 NSDateFormatterXXXStyle,我都会得到以下结果: en_AU: 06/19/09 在国际系统偏好设置 -> 格式中,我将我的区域设置为澳大利亚。但!我的日期偏好确实是 dd/mm/yy。而代码以对澳大利亚不友好的 mm/dd/yy 格式输出。
    • 啊。 cmets中没有换行符?
    • 根据 Apple 文档,NSDateFormatterMediumStyle 应该输出类似“Jun 19, 2009”而不是 06/19/09。
    【解决方案2】:

    好像少了一行代码:

    [dateFormatter setLocale:usLocale];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-23
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      相关资源
      最近更新 更多