android - ThreeTenABP 不解析日期

标签 android date datetime timezone

我正在尝试将 ISO 8601 时间转换为人类可读且符合 Android 设备本地时区的时间。

String date = "2016-09-24T06:24:01Z";
LocalDate test = LocalDate.parse(date, ISO_INSTANT);

但它返回:

method threw 'org.threeten.bp.format.DateTimeParseException' exception

来自阅读http://www.threeten.org/threetenbp/apidocs/org/threeten/bp/format/DateTimeFormatter.html#ISO_INSTANT看起来我正在做的事情应该是可能的。

我做错了什么?

编辑

扩展异常错误:

Unable to obtain LocalDate from TemporalAccessor: DateTimeBuilder[fields={MilliOfSecond=0, NanoOfSecond=0, InstantSeconds=1474698241, MicroOfSecond=0}, ISO, null, null, null], type 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);

最佳答案

@alex 回答正确。这是一个工作示例。

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

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(); 

关于android - ThreeTenABP 不解析日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39908964/

相关文章:

java - 使用动态方向禁用屏幕旋转

java - Android 使用 GoogleApiClient 获取用户位置纬度和经度

android - 我如何在适用于 Android 的 Google Play Billing 中获取有关应用内购买的信息

android - 警报对话框不工作

java - 在 Groovy 中查找一个月的第 n 个工作日

PHP: 日期时间 '-1 day'

python - 列表格式的 panda 数据框列值

javascript - 当我尝试从另一种日期格式创建日期对象时,结果日期正在更改它的值

python - 相同条件日期 True with Series 但 False using element

Python 生成日期系列