gpt4 book ai didi

java - 如何在java中实现自定义日期格式?

转载 作者:行者123 更新时间:2023-12-02 06:33:45 25 4
gpt4 key购买 nike

我想格式化日期以包含特殊的“一天中的部分时间”指示符 - 例如“午夜”表示小时=0,“上午”表示 0<小时<12,“中午”表示小时=12 以及“pm”代表时间>12。

既然SimpleDateFormat没有这个功能,我该如何实现呢?我可以使用 SimpleDateFormat 来处理格式的其余部分,并分别执行一天中的部分,但这涉及创建一个新的 Calendar 对象、计算一天中的部分并将结果拼接在一起。这感觉很尴尬而且效率低下。

理想情况下,我想将我的“部分时间”格式化程序“插入”SimpleDateFormat 或其他日期格式化程序(如果可以使用 joda-time,我也感兴趣)。

最佳答案

我会使用 ChoiceFormat用于自定义输出,DateFormat 用于其余部分。这可以使用 MessageFormat 非常优雅地组合起来。 .

    final String format = "{0,choice,0#midnight|0<am|12#noon|12<pm} {1,date,dd MMM YYYY HH:mm:ss}";
final MessageFormat messageFormat = new MessageFormat(format);

示例:

public static void main(String args[]) {
final Calendar calendar = Calendar.getInstance();
final String format = "{0,choice,0#midnight|0<am|12#noon|12<pm} {1,date,dd MMM YYYY HH:mm:ss}";
final MessageFormat messageFormat = new MessageFormat(format);

System.out.println(messageFormat.format(new Object[]{calendar.get(Calendar.HOUR_OF_DAY), calendar.getTime()}));
System.out.println("==== TESTS ====");
calendar.set(Calendar.HOUR_OF_DAY, 0);
System.out.println(messageFormat.format(new Object[]{calendar.get(Calendar.HOUR_OF_DAY), calendar.getTime()}));
calendar.set(Calendar.HOUR_OF_DAY, 1);
System.out.println(messageFormat.format(new Object[]{calendar.get(Calendar.HOUR_OF_DAY), calendar.getTime()}));
calendar.set(Calendar.HOUR_OF_DAY, 11);
System.out.println(messageFormat.format(new Object[]{calendar.get(Calendar.HOUR_OF_DAY), calendar.getTime()}));
calendar.set(Calendar.HOUR_OF_DAY, 12);
System.out.println(messageFormat.format(new Object[]{calendar.get(Calendar.HOUR_OF_DAY), calendar.getTime()}));
calendar.set(Calendar.HOUR_OF_DAY, 14);
System.out.println(messageFormat.format(new Object[]{calendar.get(Calendar.HOUR_OF_DAY), calendar.getTime()}));
}

输出:

am 08 Nov 2013 08:53:58
==== TESTS ====
midnight 08 Nov 2013 00:53:58
am 08 Nov 2013 01:53:58
am 08 Nov 2013 11:53:58
noon 08 Nov 2013 12:53:58
pm 08 Nov 2013 14:53:58

关于java - 如何在java中实现自定义日期格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19854768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com