我正在尝试将ISO 8601时间转换成人类可读的东西,并在Android设备的本地时区。
String date = "2016-09-24T06:24:01Z";
LocalDate test = LocalDate.parse(date, ISO_INSTANT);但它会返回:
方法抛出'org.threeten.bp.format.DateTimeParseException‘异常
从阅读INSTANT可以看出,我正在做的事情应该是可能的。
我做错了什么?
编辑
扩展异常错误:
无法从LocalDate获得TemporalAccessor: DateTimeBuilderfields={MilliOfSecond=0、NanoOfSecond=0、InstantSeconds=1474698241、MicroOfSecond=0}、ISO、null、org.threeten.bp.format.DateTimeBuilder类型
编辑2
解决办法在下面的答案中。对于遇到这种情况的任何人,如果您想指定自定义输出格式,可以使用:
String format = "MMMM dd, yyyy \'at\' HH:mm a";
String dateString = DateTimeFormatter.ofPattern(format).withZone(ZoneId.systemDefault()).format(instant);发布于 2016-10-07 04:22:58
@亚历克斯的回答是正确的。下面是一个有用的例子。
瞬间代表一个时间点。若要转换为任何其他本地类型,则需要时区。
String date = "2016-09-24T06:24:01Z";此日期字符串在内部使用DateTimeFormatter#ISO_INSTANT进行解析。
Instant instant = Instant.parse(date);在这里,您可以使用时区(默认为系统时区)转换为其他本地类型。
LocalDateTime localDateTime = instant.atZone(ZoneId.systemDefault()).toLocalDateTime();
LocalDate localDate = instant.atZone(ZoneId.systemDefault()).toLocalDate();
LocalTime localTime = instant.atZone(ZoneId.systemDefault()).toLocalTime();或者,您可以使用静态方法获取本地日期时间,然后获取本地日期和时间。
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
LocalDate localDate = localDateTime.toLocalDate();
LocalTime localTime = localDateTime.toLocalTime(); 发布于 2016-10-07 03:54:53
您需要使用Instant.parse()。
这将为您提供一个Instant,您可以将其与时区结合起来创建一个LocalDate。
发布于 2020-05-14 23:49:34
在科特林:
直接基于本地时区转换为LocalDateTime::
val instant: Instant = Instant.parse("2020-04-21T02:22:04Z")
val localDateTime = instant.atZone(ZoneId.systemDefault()).toLocalDateTime() 根据本地时区分别转换为日期和时间:
val localDate: LocalDate = instant.atZone(ZoneId.systemDefault()).toLocalDate()
val localTime: LocalTime = instant.atZone(ZoneId.systemDefault()).toLocalTime()https://stackoverflow.com/questions/39908964
复制相似问题