【问题标题】:String.format doesn't give month and weeknames in German localeString.format 不提供德语语言环境中的月份和星期名称
【发布时间】:2011-06-07 12:33:56
【问题描述】:

我在我的应用程序中使用以下代码:

Calendar tmpCalendar = Calendar.getInstance(Locale.getDefault());
String itemTime = String.format(
        Locale.getDefault(),
        "%1$tA, %1$te. %1$tB %1$tY",
        tmpCalendar);

德语是我设备上的默认语言,所以我希望得到如下内容:

丁斯塔格,2011 年 6 月 7 日

相反,我得到:

3, 7. 6 2011

如果我使用 Locale.US 而不是 Locale.getDefault() 一切正常。我做错了吗?

奇怪的是,它可以在运行德语版 Android 2.2 的模拟器中运行,但不能在同样运行 2.2 的 HTC Desire 上运行。为什么?

【问题讨论】:

    标签: android date localization format


    【解决方案1】:

    这似乎是某些供应商的错误,是issue #9453 in the Android issue tracker

    【讨论】:

    • 这不是错误;设备不支持所选的语言环境。亲自尝试一下:Locale.getAvailableLocales() 不会包含德语语言环境。您要么需要手动提供月份和工作日名称,要么应对并非所有设备都是平等的这一事实。
    【解决方案2】:
    SimpleDateFormat sdf = new SimpleDateFormat("EE/MM/yyyy");
    Date date = new Date();
    String sDate= sdf.format(date);
    

    阅读更多here

    【讨论】:

    • 我写了一个更新。它适用于模拟器,但不适用于设备:(
    • EE 给了我一个简短的书面一天,例如“di”。当我创建EEEE 时,它写了“dinsdag”
    • 看我的回答。这似乎是我设备上的一个错误
    【解决方案3】:

    它完全按照你的要求去做。如果您想对流程进行细粒度控制,您始终可以使用 SimpleDateFormat。但是,我宁愿推荐这种方法:

    Calendar tmpCalendar = Calendar.getInstance(Locale.getDefault());
    DateFormat formatter = DateFormat.getDateInstance(DateFormat.LONG, Locale.getDefault());
    formatter.setTimeZone(TimeZone.getDefault());
    String itemTime = formatter.format(tmpCalendar.getTime());
    

    另外,我建议使用 DateFormat.DEFAULT 但您希望使用长日期格式,所以...

    【讨论】:

    • 我必须承认我没有意识到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    相关资源
    最近更新 更多