【问题标题】:Joda - DateTimeFormat - switching position of "MM" and "dd" depending on default LocaleJoda - DateTimeFormat - 根据默认区域设置切换“MM”和“dd”的位置
【发布时间】:2013-01-03 20:47:27
【问题描述】:

我有 LocalDate,我想以 2 位数字、全年和“-”作为分隔符打印日期。

我当然可以这样使用:

DateTimeFormatter dtf = DateTimeFormat.forPattern("dd-MM-yyyy");
dtf.print(localDate);

它显示:

17-09-2012
18-09-2012
19-09-2012

但这仅适用于我的语言环境,其他的呢?例如美国应该是:

09-17-2012
09-18-2012
09-19-2012

如何做到这一点?

DateTimeFormatter dtf = DateTimeFormat.shortDate();

它自己切换日期和月份的位置。 但它只打印:

(my locale):
17/9/12
18/9/12
19/9/12
(USA locale):
9/17/12
9/18/12
9/19/12

【问题讨论】:

    标签: java android jodatime datetime-format


    【解决方案1】:

    来自DateTimeFormatter API

    // 使用默认值打印(默认区域设置、日期时间的年表/区域)
    String dateStr = formatter.print(dt);
    // 使用法语语言环境打印
    String dateStr = formatter.withLocale(Locale.FRENCH).print(dt);
    // 使用 UTC 时区打印
    String dateStr = formatter.withZone(DateTimeZone.UTC).print(dt);

    因此,您可以在 DateTimeFormatter 中使用 Locale 或 DateTimeZone。

    但是,由于设置了模式,输出仍然是相同的。

    您可以使用样式来定义您的DateTimeFormatter

    DateTimeFormatter dtf = DateTimeFormat.forStyle("M-");
    

    并使用区域设置打印它。

    【讨论】:

    • 是的,我可以阅读 API :) 但这不是答案。 DateTimeFormatter dtf = DateTimeFormat.forPattern("dd-MM-yyyy"); dtf.withLocale(Locale.US).print(localDate) 这仍将显示 17-09-2012 但不显示 09-17-2012
    • @AppiDevo 对不起,你是对的。这对模式没有帮助。我正在做一些进一步的测试。您可以使用 DateTimeFormat#forStyle 还是需要特殊模式?
    • @AppiDevo 您几乎必须选择是要控制模式(并自己编写它们)还是自动本地化(并且必须坚持标准模式)。我从未听说过可以让您将两者结合起来的 API。
    • @Katja Christiansen DateTimeFormat.forStyle("M-") 与 DateTimeFormat.shortDate() 相同;我找到了解决方案,但我们不能确定它是否适用于每个区域设置。 String ourPattern = DateTimeFormat.patternForStyle("S-", Locale.getDefault());现在我们改变我们的模式:M on MM, d on dd, yy on yyyy and / on - 。 DateTimeFormatter dtf = DateTimeFormat.forPattern(ourPattern);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    • 2017-08-23
    • 2023-04-02
    • 2020-02-20
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    相关资源
    最近更新 更多