无法将 java 中的字符串转换为 MMM/dd/yyy 格式
can't convert String to MMM/dd/yyy format in java
我尝试将输入类型 String
转换为格式 "MMM/dd/yyyy"
的 LocalDate
,但是当我输入时,它抛出异常:
Exception in thread "main" java.time.format.DateTimeParseException:
Text 'DEC/12/1999' could not be parsed at index 0
这是我的代码:
Scanner sc = new Scanner(System.in);
DateTimeFormatter format1 = DateTimeFormatter.ofPattern("MMM/dd/yyyy");
System.out.print("Please enter the first date: ");
LocalDate firstDate = LocalDate.parse(sc.nextLine(), format1);
System.out.print("Please enter the second date: ");
System.out.println(firstDate);
我该如何解决这个问题?
在解析像 "DEC/12/1999"
:
这样的 String
时,您必须注意几件事
- 月份的缩写没有全球标准,它们在语言(例如英语、法语、日语...)和风格(例如是否有尾随点)方面有所不同
- 在解析小写月份缩写和大写月份缩写时存在差异
这就是为什么你必须确保你的 DateTimeFormatter
真的知道该做什么,我认为如果只是通过 .ofPattern(String, Locale)
构建是行不通的。
向其提供有关要解析的 String
的信息:
- 通过应用
parseCaseInsensitive()
使其不区分大小写地解析
- 通过定义
Locale
使其考虑语言和风格
您可以使用 DateTimeFormatterBuilder
来做到这一点,下面是一个示例:
public static void main(String[] args) throws IOException {
// example input
String date = "DEC/12/1999";
// Build a formatter, that...
DateTimeFormatter dtf = new DateTimeFormatterBuilder()
// parses independently from case,
.parseCaseInsensitive()
// parses Strings of the given pattern
.appendPattern("MMM/dd/uuuu")
// and parses English month abbreviations.
.toFormatter(Locale.ENGLISH);
// Then parse the String with the specific formatter
LocalDate localDate = LocalDate.parse(date, dtf);
// and print the result in a different format.
System.out.println(localDate.format(DateTimeFormatter.ISO_LOCAL_DATE));
}
输出:
1999-12-12
我尝试将输入类型 String
转换为格式 "MMM/dd/yyyy"
的 LocalDate
,但是当我输入时,它抛出异常:
Exception in thread "main" java.time.format.DateTimeParseException: Text 'DEC/12/1999' could not be parsed at index 0
这是我的代码:
Scanner sc = new Scanner(System.in);
DateTimeFormatter format1 = DateTimeFormatter.ofPattern("MMM/dd/yyyy");
System.out.print("Please enter the first date: ");
LocalDate firstDate = LocalDate.parse(sc.nextLine(), format1);
System.out.print("Please enter the second date: ");
System.out.println(firstDate);
我该如何解决这个问题?
在解析像 "DEC/12/1999"
:
String
时,您必须注意几件事
- 月份的缩写没有全球标准,它们在语言(例如英语、法语、日语...)和风格(例如是否有尾随点)方面有所不同
- 在解析小写月份缩写和大写月份缩写时存在差异
这就是为什么你必须确保你的 DateTimeFormatter
真的知道该做什么,我认为如果只是通过 .ofPattern(String, Locale)
构建是行不通的。
向其提供有关要解析的 String
的信息:
- 通过应用
parseCaseInsensitive()
使其不区分大小写地解析
- 通过定义
Locale
使其考虑语言和风格
您可以使用 DateTimeFormatterBuilder
来做到这一点,下面是一个示例:
public static void main(String[] args) throws IOException {
// example input
String date = "DEC/12/1999";
// Build a formatter, that...
DateTimeFormatter dtf = new DateTimeFormatterBuilder()
// parses independently from case,
.parseCaseInsensitive()
// parses Strings of the given pattern
.appendPattern("MMM/dd/uuuu")
// and parses English month abbreviations.
.toFormatter(Locale.ENGLISH);
// Then parse the String with the specific formatter
LocalDate localDate = LocalDate.parse(date, dtf);
// and print the result in a different format.
System.out.println(localDate.format(DateTimeFormatter.ISO_LOCAL_DATE));
}
输出:
1999-12-12