网站首页 > 精选教程 正文
从JDK 8开始,我们拥有了一个全面的日期时间API,其中包含LocalDate、LocalTime、LocalDateTime、ZonedDateTime、OffsetDateTime和OffsetTime等类。我们可以通过DateTimeFormatter.ofPattern()轻松格式化这些类返回的日期时间输出。例如,这里我们使用y-MM-dd HH:mm:ss模式格式化一个LocalDateTime:
// 2023-01-07 15:31:22
String ldt = LocalDateTime.now()
.format(DateTimeFormatter.ofPattern("y-MM-dd HH:mm:ss"));
捆绑的代码中提供了更多示例,但如果你需要深入覆盖这个主题,我建议你阅读《Java编码问题》(第一版)中的第58和59个问题。
那么,如何根据给定的Locale自定义我们的格式呢?例如,德国:
Locale.setDefault(Locale.GERMANY);
我们通过ofLocalizedDate()、ofLocalizedTime()和ofLocalizedDateTime()来实现这一点,如下所示:
// 7. Januar 2023
String ld = LocalDate.now().format(
DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG));
// 15:49
String lt = LocalTime.now().format(
DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT));
// 07.01.2023, 15:49:30
String ldt = LocalDateTime.now().format(
DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM));
此外,我们可能还有:
// Samstag, 7. Januar 2023 um 15:49:30
// Osteurop?ische Normalzeit
String zdt = ZonedDateTime.now().format(
DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL));
// 07.01.2023, 15:49:30
String odt = OffsetDateTime.now().format(
DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM));
// 15:49:30
String ot = OffsetTime.now().format(
DateTimeFormatter.ofLocalizedTime(FormatStyle.MEDIUM));
本地化的日期、时间或日期时间格式化程序支持四种格式样式:
- FULL - 使用所有细节的格式。
- LONG - 使用很多细节但不使用所有细节的格式。
- MEDIUM - 使用一些细节的格式。
- SHORT - 尽可能短的格式(通常是数字的)。
根据本地化对象和格式样式的组合,代码可能会以DateTimeException异常结束,提示无法提取……。如果你看到这样的异常,那么是时候查阅下表了,该表提供了可接受的组合:
图1.17 - 本地化日期、时间和日期时间的格式样式
此外,从JDK 19开始,我们还可以使用ofLocalizedPattern(String pattern)。我们可以传递任何符合图1.18的模式:
图1.18 - 为ofLocalizedPattern(String pattern)构建模式
话虽如此,让我们将当前Locale更改为罗马尼亚:
Locale.setDefault(Locale.of("ro", "RO"));
然后,让我们看一些ofLocalizedPattern()的示例:
// 01.2023
String ld = LocalDate.now().format(
DateTimeFormatter.ofLocalizedPattern("yMM"));
// 15:49
String lt = LocalTime.now().format(
DateTimeFormatter.ofLocalizedPattern("Hm"));
// 01.2023, 15:49
String ldt = LocalDateTime.now().format(
DateTimeFormatter.ofLocalizedPattern("yMMHm"));
甚至更多:
// 01.2023, 15:49:30 EET
String zdt = ZonedDateTime.now().format(
DateTimeFormatter.ofLocalizedPattern("yMMHmsv"));
// 01.2023, 15:49:30
String odt = OffsetDateTime.now().format(
DateTimeFormatter.ofLocalizedPattern("yMMHms"));
// 15:49:30
String ot = OffsetTime.now().format(
DateTimeFormatter.ofLocalizedPattern("Hms"));
你可以在捆绑的代码中练习所有这些示例。此外,在捆绑的代码中,你可以找到一个应用程序,它使用Locale和NumberFormat为不同的Locale(货币)格式化版税金额。
猜你喜欢
- 2024-11-12 Java时间类介绍:Date的使用 java中datetime数据类型
- 2024-11-12 Java 阴历阳历转换 java转化日期格式
- 2024-11-12 Java 日期类型比较没有返回正确的结果
- 2024-11-12 如何将ABAP时间戳转换为JAVA时间戳,原理是什么呢?
- 2024-11-12 Java8 新特性:新日期与时间 java新时间类
- 2024-11-12 Java中有哪些可以用于日期和时间的API?
- 2024-11-12 Java常用日期操作类 java 日期处理类
- 2024-11-12 日期时间--JAVA成长之路 日期格式 java
- 2024-11-12 java8日期类型属性指定格式序列化配置优先级问题
- 2024-11-12 日期时间API之TemporalAdjusters与TemporalAdjuster
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)