我有
String dateAsString = "15-May-84";
我想将其转换为
Date date = 15/05/1984;
第一次尝试
new SimpleDateFormat("dd/MM/yyyy").format(new Date(dateAsString )), "dd/MM/yyyy")
第二次尝试
LocalDate.parse(dateAsString , DateTimeFormatter.ofPattern("dd/MM/uuuu")));
我尝试了 SimpleDateFormat
和 LocalDate
的多种方法,但它总是返回 15/05/0084。
有人可以帮忙吗
最佳答案
首先,用两位数字作为字符串的年份是不好的,为什么?
说明
要解析您的日期,很简单,您可以使用:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-yy")
.withLocale(Locale.US);
LocalDate ld = LocalDate.parse("15-May-84", formatter);
但是
这将返回 2084-05-15
,我认为您不是在寻找这个,而是在寻找 1984-05-15
。
快速修复
因此,要解决此问题,您可以使用 minusYears(100)
:
LocalDate ld = LocalDate.parse("15-May-84", formatter).minusYears(100);
但是
这对于其他年份可能是个问题,例如 15-May-20
将返回 1920-05-15
。
For that I don't advice at all to use two digits in your year as a string.
除非
除非您再次确认您的日期介于 1900
和 1999
之间,或介于 2000
和 2999
之间。在这种情况下,您可以创建一个(安全)自定义解析器!
重要
不要使用旧版 Date 库,而仅使用现代 java.time
API
关于java - 如何在java中将模式dd-MMM-yy的字符串日期值转换为模式dd/MM/yyyy的日期对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60865121/