【问题标题】:Android DateFormat for AM/PM differs between devicesAM/PM 的 Android DateFormat 因设备而异
【发布时间】:2016-09-14 07:57:08
【问题描述】:

我正在像这样格式化日期:

    public static String toFormattedDate(@NonNull Time time, String toFormat) {
        mDateFormat = new SimpleDateFormat(toFormat);

        Date date = new Date();
        date.setTime(time.toMillis(true));

        return mDateFormat.format(date);
    }

我使用的格式是:

    public static final String TIME = "hh:mm a";

但我用于测试的两种设备之间存在差异......

Nexus 10:

Nexus 5X:

如何在设备之间统一格式化?

【问题讨论】:

  • 作为一种解决方法,我只是使用了 String.replace("am", "AM").replace("pm", "PM") 但我想知道我是否已经可以通过格式化和不是字符串操作。
  • 在设置为查看时将该日期值更改为UPPER CASE
  • @skadoosh 已经这样做了。我遵循了接受的答案。谢谢!

标签: java android date-format simpledateformat android-date


【解决方案1】:

您可能必须使用 24 小时值来确定要附加的内容,以便添加所需的格式。

public static final String TIME = "hh:mm";

然后

String ampm = Integer.parseInt(time.valueOf("hh")) >= 12 ? "PM" : "AM";
...
return mDateFormat.format(date)+" "+ampm;

或者如果你觉得懒惰,你可以不改变 TIME 的值来做:

return mDateFormat.format(date).toUpperCase().replace(".","");

【讨论】:

    【解决方案2】:
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    String currentDateandTime = sdf.format(new Date());
    

    【讨论】:

    • Nexus 10 和 Nexus 5X 之间仍然存在差异。 Nexus 10 将其格式化为“AM”或“PM”,而 Nexus 5X 将其格式化为“a.m”。或“下午”。我想我只需要手动格式化。
    • "AM" 和 "a.m" 与系统配置有关,因此您可以手动执行以显示在 "AM" 或 "a.m" 中,但不建议这样做
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    相关资源
    最近更新 更多