如何将日期时间数据字符串转换为 LocalDate?
How do I convert a String of date time data to a LocalDate?
我有一个日期时间信息字符串,我正试图将其转换为 LocalDate 字段。字符串的内容是“2019-08-28 09:00:00”。我正在尝试获取 MM/dd/yyyy LocalDate 值以加载到 JavaFX DatePicker 字段中。
我试过了
Date date = new SimpleDateFormat("MM/dd/yyyy").parse(stringDate);
和
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
LocalDate localDate = LocalDate.parse((CharSequence) date, formatter);
两者都返回了错误。选项 #2 返回的错误如下:
Caused by: java.time.format.DateTimeParseException: Text '2019-08-30 12:00:00' could not be parsed at index 2
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
at java.time.LocalDate.parse(LocalDate.java:400)
at utils.DateTimeConverter.convertStringDateToLocalDate(DateTimeConverter.java:27)
您的模式不包含相关时间信息。你也需要包括它。
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(stringDate);
这取决于你想达到什么目的?
如果结果是包含小时、分钟和秒的日期,那么 DateFormatter 比 DateTimeFormatter 更合适
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate localDate = LocalDate.parse(date, formatter);
或
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalTimeDate localDateWithTime = LocalTimeDate.parse(date, formatter);
产生错误是因为您想使用 LocalDate
而不是 LocalTimeDate
来生成一个没有(小时,分钟等)的日期 DateTimeFormatter
输入您的模式格式。
注意 :您不必将 CharSequence
转换为 String
编辑 2:
如果您想在日期选择器中输入的日期是 2019-08-28,模式应该是 yyyy-MM-dd
而不是 MM-dd-yyyy
。
这里的 JUnit 测试验证了我所说的:
@Test
public void testDate() {
String date = "2019-08-30 12:00:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localTimeDate = LocalDateTime.parse(date, formatter);
assertTrue(localTimeDate.toString().equals(date));
}
@Test
public void testDateWithoutTime() {
String date = "2019-08-30";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate localDate = LocalDate.parse(date, formatter);
assertTrue(localDate.toString().equals(date));
}
我有一个日期时间信息字符串,我正试图将其转换为 LocalDate 字段。字符串的内容是“2019-08-28 09:00:00”。我正在尝试获取 MM/dd/yyyy LocalDate 值以加载到 JavaFX DatePicker 字段中。
我试过了
Date date = new SimpleDateFormat("MM/dd/yyyy").parse(stringDate);
和
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
LocalDate localDate = LocalDate.parse((CharSequence) date, formatter);
两者都返回了错误。选项 #2 返回的错误如下:
Caused by: java.time.format.DateTimeParseException: Text '2019-08-30 12:00:00' could not be parsed at index 2
at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1949)
at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1851)
at java.time.LocalDate.parse(LocalDate.java:400)
at utils.DateTimeConverter.convertStringDateToLocalDate(DateTimeConverter.java:27)
您的模式不包含相关时间信息。你也需要包括它。
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(stringDate);
这取决于你想达到什么目的?
如果结果是包含小时、分钟和秒的日期,那么 DateFormatter 比 DateTimeFormatter 更合适
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate localDate = LocalDate.parse(date, formatter);
或
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalTimeDate localDateWithTime = LocalTimeDate.parse(date, formatter);
产生错误是因为您想使用 LocalDate
而不是 LocalTimeDate
来生成一个没有(小时,分钟等)的日期 DateTimeFormatter
输入您的模式格式。
注意 :您不必将 CharSequence
转换为 String
编辑 2:
如果您想在日期选择器中输入的日期是 2019-08-28,模式应该是 yyyy-MM-dd
而不是 MM-dd-yyyy
。
这里的 JUnit 测试验证了我所说的:
@Test
public void testDate() {
String date = "2019-08-30 12:00:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localTimeDate = LocalDateTime.parse(date, formatter);
assertTrue(localTimeDate.toString().equals(date));
}
@Test
public void testDateWithoutTime() {
String date = "2019-08-30";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate localDate = LocalDate.parse(date, formatter);
assertTrue(localDate.toString().equals(date));
}