有什么办法可以转换1970年之前的java中的日期?

时间:2019-07-11 12:18:58

标签: java java-8 simpledateformat date-formatting 2-digit-year

我想将yymmdd格式的日期转换为YYYYMMDD,但是当使用simpledateformat类时,我得到的是1970年以后的年份,但要求是1970年之前的年份。

1 个答案:

答案 0 :(得分:2)

java.time

解析输入

yymmdd中控制两位数字年份的解释的方法是通过appendValueReduced的{​​{1}}方法。

DateTimeFormatterBuilder

提供1870年的基年将导致两位数字的年份在1870年至1969年的范围内解释(因此始终在1970年之前)。根据您的要求提供不同的基准年。另外,除非您确定100年内的输入年份是预期和有效的,否则我建议您对解析日期进行范围检查。

格式化和打印输出

    DateTimeFormatter twoDigitFormatter = new DateTimeFormatterBuilder()
            .appendValueReduced(ChronoField.YEAR, 2, 2, 1870)
            .appendPattern("MMdd")
            .toFormatter();
    String exampleInput = "691129";
    LocalDate date = LocalDate.parse(exampleInput, twoDigitFormatter);

在此示例中的输出是:

  

19691129

如果输入为 DateTimeFormatter fourDigitFormatter = DateTimeFormatter.ofPattern("uuuuMMdd"); String result = date.format(fourDigitFormatter); System.out.println(result); ,则输出为:

  

18700114

使用LocalDate保留日期

与其将日期从一种字符串格式转换为另一种字符串格式,不如将日期保留在700114中而不是字符串中,这是更好的选择(就像您不在字符串中保留整数值一样) 。当程序接受字符串输入时,立即解析为LocalDate。仅在需要输出字符串时,才将LocalDate格式化回字符串。因此,我也将解析与上面的格式分开了。

链接

Oracle tutorial: Date Time解释了如何使用java.time。