我想以区域设置的默认格式打印不带秒的时间。所以我用getTimeInstance()
or得到格式化程序getTimeInstance(int style)
。但即使我使用一种SHORT
样式,它也会包含时间的秒部分。
有什么办法(除了创建我自己的格式,这将不是语言环境默认值并手动维护)我可以获取默认值并拆分秒数吗?
谢谢
罗马
我想以区域设置的默认格式打印不带秒的时间。所以我用getTimeInstance()
or得到格式化程序getTimeInstance(int style)
。但即使我使用一种SHORT
样式,它也会包含时间的秒部分。
有什么办法(除了创建我自己的格式,这将不是语言环境默认值并手动维护)我可以获取默认值并拆分秒数吗?
谢谢
罗马
DateFormat.getTimeInstance( DateFormat.SHORT ) 在这里工作得很好:从20:00:00到20:00以及从8:00:00 PM 到 8:00 PM。
编辑:这是不够的(如下面的第一条评论所述)。为了历史的缘故,我将其保留在这里,并防止其他人以类似的方式做出回应:)
您是否考虑过将当前格式保存为字符串并使用 String 的 substring 方法手动删除秒数?
如果有人正在阅读这篇文章并且要么使用 Java 8 或更高版本,要么可以使用(良好且面向未来的)外部库:
DateTimeFormatter noSeconds = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT)
.withLocale(Locale.ITALY);
LocalTime time = LocalTime.now(ZoneId.systemDefault());
System.out.println(time.format(noSeconds));
这刚刚打印:
15.26
请替换您想要的语言环境而不是Locale.ITALY
. 用于Locale.getDefault()
JVM 的语言环境设置。我相信它在所有语言环境中都可以毫不费力地打印出来。
在代码中我使用了一个LocalTime
对象,但相同的代码适用于许多其他日期和时间类,包括LocalDateTime
、和.OffsetDateTime
OffsetTime
ZonedDateTime
要使用DateTimeFormatter
Android 上提到的任何其他类,您需要ThreeTenABP。有关如何在此问题中的更多详细信息:如何在 Android 项目中使用 ThreeTenABP。对于任何非 Android Java 6 或 7,请使用ThreeTen Backport。