问题标签 [threetenbp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
17130 浏览

java - Android 上的 ThreeTen-Backport 错误 - ZoneRulesException:未注册时区数据文件

我正在为我的 Android 项目使用 ThreeTen-Backport 库(因为 java.time 尚未在 android 开发中实现)。

当我写LocalDate today=LocalDate.now();LocalTime time=LocalTime.now();我得到以下异常:

同一行代码在我拥有的另一个 java 项目中运行良好,该项目使用本机 java.time 库。

我搜索了一个可能的解决方案,但找不到任何有用的解决方案:一个解决方案建议我需要使用另一个包含时区规则的 jar,而其他解决方案建议类路径中可能有两个或多个 ThreeTenBP 库。
这些案例与我的案例不符。

build.gradle文件的依赖项部分,我尝试了一些配置:

  • 起初,我使用 -compile 'com.jakewharton.threetenabp:threetenabp:1.0.3'
  • 然后,我尝试了- compile 'org.threeten:threetenbp:1.0.3'
  • 之后,我尝试了- compile 'org.threeten:threetenbp:1.3.1'
  • 目前,我使用compile 'org.threeten:threetenbp:1.3.2'

我不知道那行代码有什么问题以及如何修复它。and方法应该在不指定时区的情况下工作
LocalDate.now()LocalTime.now()

0 投票
3 回答
33708 浏览

android - 如何在 Android 项目中使用 ThreeTenABP

我问这个问题是因为我是 Java 和 Android 的新手,我搜索了几个小时试图弄清楚这一点。答案来自相关答案的组合,所以我想我会记录我所学到的知识,以供其他可能正在苦苦挣扎的人使用。见答案。

我正在使用 Android Studio 2.1.2,我的 Java 设置如下:

0 投票
0 回答
1349 浏览

java - ZonedDateTime.now() 导致 org.threeten.bp.zone.ZoneRulesException

我刚刚发现这个库可以在 Android 上使用 Java 8 中的 java.time。在我的 TimePickerDialog 中,我要求一个时间,然后我必须向服务器发送一个 HTTP 请求,其中包含一个 Date 对象(来自对话框的时间),格式如下:"YYYY-MM-DDTHH:MM:SS+HH:MM" 我开始尝试使用通常的类(日历, Date, SimpleDateFormat),但过了一段时间我放弃并寻找更干净的解决方案,并找到了Java 8 中的ZonedDateTime 类。它看起来正是我想要使用的类,但是当我尝试使用它创建一个实例时ZonedDateTime.now(),我得到以下堆栈跟踪:

AndroidThreeTen.init(this);按照我的应用程序类(onCreate)中的文档做了,所以我不知道是什么导致了问题。

额外的问题:一旦我让它工作并且我想在 ZonedDateTime 对象中发送日期,我如何将它转换为简单的java.util.Date?非常感谢您提前。

编辑:初始化证明:

顺便说一句,API 级别是 24。

0 投票
2 回答
495 浏览

java - Gradle - 在单元测试中使用其他版本的依赖项

在纯 Java 模块中,我依赖于compile group: 'org.threeten', name: 'threetenbp', version: threeTenVersion, classifier: 'no-tzdb'. 我正在使用该no-tzdb变体,因为此模块将在 Android 应用程序中使用,并且 tzdb 将由 Android 模块添加。

但是,在我的单元测试中,我希望能够调用一些方法,比如DateTime.now()需要使用 tzdb 初始化 ThreeTen。

我想知道是否有办法仅在单元测试期间使用另一个版本的库,以便我可以使用安装了 tzdb 的版本?

我已经尝试过以下方法:

no-tzdb仍在使用。

谢谢你,皮埃尔

0 投票
2 回答
1676 浏览

android - 如何在 Retrofit 中反序列化 ThreeTen LocalDateTime?

我正在尝试在 Retrofit 中反序列化此类:

如您所见,我使用的是 LocalDateTime,它来自 ThreeTen。好吧,我从我的服务器收到这个

好吧,但是我的 dateTime 始终为Null,所以我相信 Retrofit 不知道如何解析数据,或者我错过了什么?

有什么好的解决方法吗?

任何帮助表示赞赏!

0 投票
1 回答
1153 浏览

android - 如何解析三个 DateTIme

我正在尝试解析这个 DateTime:

但我收到此错误:

我不确定发生了什么......它应该完全有效!

有什么帮助吗?不管怎么说,还是要谢谢你!

0 投票
2 回答
45355 浏览

java - 如何使用 ThreeTenABP 将 ZonedDateTime/OffsetDateTime 转换为日期?

使用ThreeTen Android Backport库,将ZonedDateTimeorOffsetDateTime转换为老式java.util.Date实例的最简单方法是什么?

如果我有完整的 Java 8 库可供我使用,这当然是这样做的方法(如在这个问题中):

但我不能在 Android 上使用它;特别Date.from(Instant instant)是失踪。

0 投票
2 回答
1999 浏览

java - 您可以使用 Retrofit 2 和 Gson 将 ISO 8601 时间戳直接映射到 OffsetDateTime 或 ZonedDateTime 吗?

在 Android 上,使用Retrofit 2及其Gson 转换器,您可以将 ISO 8601 字符串"2016-10-26T11:36:29.742+03:00"(在后端的 JSON 响应中)直接映射到java.util.DatePOJO 中的字段。这开箱即用。

现在,我正在使用ThreeTenABP库(它提供了 java.time 类的反向移植版本),我想知道是否可以将 ISO 时间戳字符串直接映射到更好、更现代的类型,例如OffsetDateTimeor ZonedDateTime

在大多数情况下(想想服务器端的 Java 8),显然,从 " 2016-10-26T11:36:29.742+03:00" 转换为OffsetDateTimeorZonedDateTime会很简单,因为日期字符串包含时区信息。

我尝试在我的 POJO 中同时使用OffsetDateTimeand ZonedDateTime(而不是 Date),但至少开箱即用它不起作用。如果您可以使用 Retrofit 2 在 Android 上干净地做到这一点,有什么想法吗?

依赖项:

构建改造实例:

0 投票
1 回答
19211 浏览

kotlin - 如何将 LocalDateTime 对象转换为包括时区的 ISO 字符串?

我正在尝试将日期/时间字符串来回转换为LocalDateTime对象。我使用ThreeTenBp作为日期/时间库。

字符串 -> 本地日期时间

本地日期时间 -> 字符串

由于某种原因,时区丢失:

预期:<...6-12-27T08:15:05.674[+01:00]"> 但为:<...6-12-27T08:15:05.674[]">
预期:"2016-12- 27T08:15:05.674+01:00"
实际:"2016-12-27T08:15:05.674"

0 投票
2 回答
1682 浏览

java - 具有更多控制权的本地化日期/时间

我正在使用 ThreeTen-Backport(特别是ThreeTenABP)在我的项目中显示时间戳。我希望显示的时间戳以本地化格式显示(基于Locale系统的);使用以下任何一种DateTimeFormatter.ofLocalizedDateTime()方法都很容易:

问题是我对格式化程序的输出没有太多控制,只有四种FormatStyle类型(SHORT, MEDIUM, LONG, FULL)。我很好奇是否有一种方法可以对输出进行更精细的控制,而不会丢失本地化格式。


使用前面的代码,语言环境的结果timestamp"en_US"是:

虽然"ja_JP"语言环境的结果是:

如您所见,每个语言环境都使用特定的模式,并使用 12 或 24 小时格式的默认值。我想保持本地化模式,但要更改是否显示时区,或者是否使用 12 或 24 小时格式。

例如; 如果我可以将两个语言环境都设置为使用 12 小时格式,并删除时区;结果如下所示: