将字符串转换为LocalDateTime

16

我有以下字符串:

18/07/2019 16:20

我尝试使用以下代码将该字符串转换为LocalDateTime

val stringDate = expiration_button.text.toString()
val date = LocalDateTime.parse(stringDate, DateTimeFormatter.ofPattern("dd/MM/yyyy hh:mm")).toString()

java.time.format.DateTimeParseException: 无法解析文本'18/07/2019 04:30:00':无法从TemporalAccessor获取LocalDateTime

我错过了什么?


1
也许这个可以帮助 -> https://dev59.com/jF4c5IYBdhLWcg3w3dZ_ - Róbert Polovitzer
4个回答

19

我想这将回答你的问题:

val stringDate = expiration_button.text.toString()
val formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy hh:mm");
val dt = LocalDate.parse(stringDate, formatter);

编辑1:

很可能崩溃是因为你正在使用12小时制,而非24小时制。

通过使用大写字母H将小时更改为24小时制应该能够解决问题:

val dateTime = LocalDateTime.parse(stringDate, DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm"));

它可以使用LocalDate,但我需要LocalDateTime,因为这样我会失去分钟和秒。如果我将LocalDate更改为LocalDateTime,它就会崩溃。 - Lechucico
我已经编辑了我的回答,请告诉我它的效果如何。 - Alex
问题出在小时上。我使用了 hh 而不是 HH。谢谢! - Lechucico

3
请使用以下代码将时间从字符串转换为LocalDateTime,但请确保您获取的是字符串格式的时间。
String str = "2016-03-04 11:30";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
LocalDateTime dateTime = LocalDateTime.parse(str, formatter);

顺便提一下,如果您的字符串中包含秒数,例如 "2016-03-04 11:30:40",那么您可以将日期时间格式更改为 "yyyy-MM-dd HH:mm:ss",如下所示:

String str = "2016-03-04 11:30: 40";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime dateTime = LocalDateTime.parse(str, formatter);

0

将您的日期时间格式更改为"dd/MM/yyyy hh:mm a",并提供带有额外AM/PM信息的字符串日期,例如val stringDate = "18/07/2019 04:20 PM"或者只使用24小时制的"dd/MM/yyyy HH:mm"


如果只给定了字符串 18/07/2019 16:20,那么修改它并不容易。但是,如果可以获取到另一个字符串,我建议使用 ISO 8601 格式 的字符串,例如 2019-07-18T16:20。这样,LocalDateTime 可以在没有任何显式格式化器的情况下解析该字符串,简化操作。 - Ole V.V.

-2

您可以尝试在日期中使用“-”而不是“/”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接