问题标签 [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.
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()
android - 如何在 Android 项目中使用 ThreeTenABP
我问这个问题是因为我是 Java 和 Android 的新手,我搜索了几个小时试图弄清楚这一点。答案来自相关答案的组合,所以我想我会记录我所学到的知识,以供其他可能正在苦苦挣扎的人使用。见答案。
我正在使用 Android Studio 2.1.2,我的 Java 设置如下:
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。
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
仍在使用。
谢谢你,皮埃尔
android - 如何在 Retrofit 中反序列化 ThreeTen LocalDateTime?
我正在尝试在 Retrofit 中反序列化此类:
如您所见,我使用的是 LocalDateTime,它来自 ThreeTen。好吧,我从我的服务器收到这个
好吧,但是我的 dateTime 始终为Null,所以我相信 Retrofit 不知道如何解析数据,或者我错过了什么?
有什么好的解决方法吗?
任何帮助表示赞赏!
android - 如何解析三个 DateTIme
我正在尝试解析这个 DateTime:
但我收到此错误:
我不确定发生了什么......它应该完全有效!
有什么帮助吗?不管怎么说,还是要谢谢你!
java - 如何使用 ThreeTenABP 将 ZonedDateTime/OffsetDateTime 转换为日期?
使用ThreeTen Android Backport库,将ZonedDateTime
orOffsetDateTime
转换为老式java.util.Date
实例的最简单方法是什么?
如果我有完整的 Java 8 库可供我使用,这当然是这样做的方法(如在这个问题中):
但我不能在 Android 上使用它;特别Date.from(Instant instant)
是失踪。
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.Date
POJO 中的字段。这开箱即用。
现在,我正在使用ThreeTenABP库(它提供了 java.time 类的反向移植版本),我想知道是否可以将 ISO 时间戳字符串直接映射到更好、更现代的类型,例如OffsetDateTime
or ZonedDateTime
。
在大多数情况下(想想服务器端的 Java 8),显然,从 " 2016-10-26T11:36:29.742+03:00
" 转换为OffsetDateTime
orZonedDateTime
会很简单,因为日期字符串包含时区信息。
我尝试在我的 POJO 中同时使用OffsetDateTime
and ZonedDateTime
(而不是 Date),但至少开箱即用它不起作用。如果您可以使用 Retrofit 2 在 Android 上干净地做到这一点,有什么想法吗?
依赖项:
构建改造实例:
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"
java - 具有更多控制权的本地化日期/时间
我正在使用 ThreeTen-Backport(特别是ThreeTenABP)在我的项目中显示时间戳。我希望显示的时间戳以本地化格式显示(基于Locale
系统的);使用以下任何一种DateTimeFormatter.ofLocalizedDateTime()
方法都很容易:
问题是我对格式化程序的输出没有太多控制,只有四种FormatStyle
类型(SHORT
, MEDIUM
, LONG
, FULL
)。我很好奇是否有一种方法可以对输出进行更精细的控制,而不会丢失本地化格式。
使用前面的代码,语言环境的结果timestamp
将"en_US"
是:
虽然"ja_JP"
语言环境的结果是:
如您所见,每个语言环境都使用特定的模式,并使用 12 或 24 小时格式的默认值。我想保持本地化模式,但要更改是否显示时区,或者是否使用 12 或 24 小时格式。
例如; 如果我可以将两个语言环境都设置为使用 12 小时格式,并删除时区;结果如下所示: