我想将yymmdd格式的日期转换为YYYYMMDD,但是当使用simpledateformat类时,我得到的是1970年以后的年份,但要求是1970年之前的年份。
答案 0 :(得分:2)
解析输入
在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。