首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ThreeTenABP不解析日期

ThreeTenABP不解析日期
EN

Stack Overflow用户
提问于 2016-10-07 03:38:04
回答 3查看 2.7K关注 0票数 4

我正在尝试将ISO 8601时间转换成人类可读的东西,并在Android设备的本地时区。

代码语言:javascript
复制
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

解决办法在下面的答案中。对于遇到这种情况的任何人,如果您想指定自定义输出格式,可以使用:

代码语言:javascript
复制
String format = "MMMM dd, yyyy \'at\' HH:mm a";
String dateString = DateTimeFormatter.ofPattern(format).withZone(ZoneId.systemDefault()).format(instant);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-07 04:22:58

@亚历克斯的回答是正确的。下面是一个有用的例子。

瞬间代表一个时间点。若要转换为任何其他本地类型,则需要时区。

代码语言:javascript
复制
String date = "2016-09-24T06:24:01Z";

此日期字符串在内部使用DateTimeFormatter#ISO_INSTANT进行解析。

代码语言:javascript
复制
Instant instant = Instant.parse(date);

在这里,您可以使用时区(默认为系统时区)转换为其他本地类型。

代码语言:javascript
复制
LocalDateTime localDateTime = instant.atZone(ZoneId.systemDefault()).toLocalDateTime();
LocalDate localDate = instant.atZone(ZoneId.systemDefault()).toLocalDate();
LocalTime localTime = instant.atZone(ZoneId.systemDefault()).toLocalTime();

或者,您可以使用静态方法获取本地日期时间,然后获取本地日期和时间。

代码语言:javascript
复制
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
LocalDate localDate = localDateTime.toLocalDate();
LocalTime localTime = localDateTime.toLocalTime(); 
票数 11
EN

Stack Overflow用户

发布于 2016-10-07 03:54:53

您需要使用Instant.parse()

这将为您提供一个Instant,您可以将其与时区结合起来创建一个LocalDate

票数 3
EN

Stack Overflow用户

发布于 2020-05-14 23:49:34

在科特林:

直接基于本地时区转换为LocalDateTime::

代码语言:javascript
复制
val instant: Instant = Instant.parse("2020-04-21T02:22:04Z")
val localDateTime = instant.atZone(ZoneId.systemDefault()).toLocalDateTime() 

根据本地时区分别转换为日期和时间:

代码语言:javascript
复制
val localDate: LocalDate = instant.atZone(ZoneId.systemDefault()).toLocalDate()
val localTime: LocalTime = instant.atZone(ZoneId.systemDefault()).toLocalTime()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39908964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档