java - 如何在java中将模式dd-MMM-yy的字符串日期值转换为模式dd/MM/yyyy的日期对象

标签 java spring date

我有

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")));

我尝试了 SimpleDateFormatLocalDate 的多种方法,但它总是返回 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.

除非

除非您再次确认您的日期介于 19001999 之间,或介于 20002999 之间。在这种情况下,您可以创建一个(安全)自定义解析器!


重要

不要使用旧版 Date 库,而仅使用现代 java.time API

关于java - 如何在java中将模式dd-MMM-yy的字符串日期值转换为模式dd/MM/yyyy的日期对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60865121/

相关文章:

java - 将 session 工厂从一项服务传递到另一项服务

java - 带有 cookie 的 RestTemplate 客户端

java - Spring转换器将null转换为空集合

android - 如何获取日期和时间并将其保存在文本文件android中?

javascript - 如何在 moment.js 中设置解析区域?

java - 在 Maven 中使用不同版本的库构建模块

java - Android Google Geolocation api 返回 403 错误

java - 如何将容器内的内部框架图标化到特定位置

r - 在 R 中自动创建具有不同开始日期的日期序列

java - 覆盖外部对象的方法