此代码有什么问题?我正在尝试解析年份和月份之间为0的日期格式。
import java.text.SimpleDateFormat;
class Main {
public static void main(String[] args) {
SimpleDateFormat format = new SimpleDateFormat("yyyy'0'MMdd");
try {
Date date = format.parse("201600101");
System.out.println(date);
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}
输出Unparseable date:“201600101”。如果我将'0'更改为除数字之外的任何内容[例如'X'和format.parse(“2016X0101”)]这将有效。
答案 0 :(得分:3)
正如Peter Lawrey所说,Java将'20160'
视为一年。您可以通过将"201600101"
修改为2016-00101
并将格式模式重构为
SimpleDateFormat format = new SimpleDateFormat("yyyy-'0'MMdd");
这将解析你的约会。
答案 1 :(得分:1)
使用可以使用年份固定宽度为四位数的库可以解决问题。 java.time
示例 - Java-8中的包:
String input = "201600101";
DateTimeFormatter dtf =
new DateTimeFormatterBuilder()
.appendValue(ChronoField.YEAR, 4, 4, SignStyle.NEVER)
.appendLiteral('0')
.appendPattern("MMdd")
.toFormatter();
LocalDate date = LocalDate.parse(input, dtf);
System.out.println(date); // 2016-01-01
这具有不被强制改变输入的强大优势。更改格式化程序总是更好。承认,SimpleDateFormat
无法实现。