Java 中有额外数字的无法解析的日期
Unparseable date with extra number in Java
这段代码有什么问题?我正在尝试解析年和月之间为 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());
}
}
}
这会输出无法解析的日期:“201600101”。如果我将“0”更改为数字以外的任何内容[例如'X' 和 format.parse("2016X0101")] 这会起作用。
正如 Peter Lawrey 所说,Java 将 '20160'
视为一年。您可以通过将 "201600101"
修改为例如 2016-00101
并将您的格式模式重构为
来解决您的问题
SimpleDateFormat format = new SimpleDateFormat("yyyy-'0'MMdd");
这将解析您的日期。
使用一个库,您可以在其中使用四位数的固定宽度来表示年份。 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
.
是不可能的
这段代码有什么问题?我正在尝试解析年和月之间为 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());
}
}
}
这会输出无法解析的日期:“201600101”。如果我将“0”更改为数字以外的任何内容[例如'X' 和 format.parse("2016X0101")] 这会起作用。
正如 Peter Lawrey 所说,Java 将 '20160'
视为一年。您可以通过将 "201600101"
修改为例如 2016-00101
并将您的格式模式重构为
SimpleDateFormat format = new SimpleDateFormat("yyyy-'0'MMdd");
这将解析您的日期。
使用一个库,您可以在其中使用四位数的固定宽度来表示年份。 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
.