我正在查询数据库并获取格式为“01-SEP-22”的日期
我想在Java中将此日期转换为“yyyy-MM-dd”格式。我有什么办法可以做到这一点吗?
java.time
我建议您使用 java.time(现代 Java 日期和时间 API)来进行日期工作。
为了解析全部大写的月份缩写(例如SEP
)我们需要指示它应用不区分大小写的解析。
我们可以用DateTimeFormatterBuilder https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/format/DateTimeFormatterBuilder.html建立一个DateTimeFormatter https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/time/format/DateTimeFormatter.html有了这样的指示。
private static final DateTimeFormatter oracleFormatter
= new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern("dd-MMM-uu")
.toFormatter(Locale.ROOT);
剩下的就顺利了:
String stringFromOracle = "01-SEP-22";
LocalDate date = LocalDate.parse(stringFromOracle, oracleFormatter);
String formattedString = date.toString();
System.out.println(formattedString);
输出是:
2022-09-01
为了生成字符串,我利用了以下事实:LocalDate.toString()
给出了您要求的格式,因此我没有明确使用任何格式化程序。该格式称为 ISO 8601,顾名思义,它是一项国际标准。
改进建议
- 不要将您的日期作为
String
来自甲骨文。检索一个LocalDate
直接保存解析。
- 不要将日期从一种字符串格式转换为另一种字符串格式。在您的程序中将日期保留为
LocalDate
。如果您需要获取字符串输入(这里不是这种情况),请将字符串解析为LocalDate
立即地。仅当您需要提供字符串输出时(例如,向用户或与另一个系统交换数据),才格式化LocalDate
转换为所需格式的字符串。
Links
-
Oracle 教程:日期时间 https://docs.oracle.com/javase/tutorial/datetime/解释如何使用 java.time。
- 维基百科文章:ISO 8601 https://en.wikipedia.org/wiki/ISO_8601
- 问题:在 SQL 数据库(例如 H2)中插入和获取 java.time.LocalDate 对象 https://stackoverflow.com/questions/43039614/insert-fetch-java-time-localdate-objects-to-from-an-sql-database-such-as-h2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)