为什么sdf.format(date)在Java中将2018-12-30转换为2019-12-30?

时间:2019-08-23 04:57:56

标签: java date

我正在尝试将日期转换为字符串,但转换时将2018年更改为2019年。

我尝试了不同的日期,它可以工作。它仅在2018年12月30日和12月31日失败。

SimpleDateFormat fmt = new SimpleDateFormat("YYYY-MM-dd");
Date date = fmt.parse("2018-12-30");
String date2 = fmt.format(date);

预期结果:2018-12-30

实际结果:2019-12-30

3 个答案:

答案 0 :(得分:7)

区分大小写

大写YYYY表示一周中的年份,而不是日历年(小写yyyy)。

所以您看到的是功能,而不是错误。根据{{​​1}}使用的一周的定义,2018年的第二天至最后一天是2019年的第一周。该定义因SimpleDateFormat而异。

避免使用旧的日期时间类

您使用的是可怕的日期时间类,而这些类早已被JSR 310中定义的现代 java.time 类取代了。

Locale

LocalDate类适合您的字符串输入。

LocalDate

答案 1 :(得分:1)

在哪里设置sdf?只需使用fmt,它将正常工作。尝试关注。

SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
Date date = fmt.parse("2018-12-30");
String date2 = fmt .format(date);

答案 2 :(得分:1)

您无需再次使用SimpleDateFormat格式化日期。只需使用如下。

所需日期格式:2019年12月30日

指定的适当日期格式为: yyyy.MM.dd (yyyy:表示全年)

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = simpleDateFormat.parse("2018-12-30");
String sDate = simpleDateFormat.format(date);
相关问题