问题标签 [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 - 将字符串解析为具有 UTC 时区的 ZonedDateTime
您如何使用 ThreeTen 库(我不能使用 java 8)解析以下格式的字符串:
2014 年 8 月 15 日
强迫这成为ZonedDateTime
2014 年 8 月 15 日 UTC 时区午夜的意义?
java - ThreeTen 和解析 Instant
我正在使用 ThreeTen 并尝试格式化 Instant。拆分它会更容易,但我很好奇,这应该工作吗?从我读过的所有内容中, Instant 应该是可解析的,并且具有模式的所有组件:
错误:org.threeten.bp.temporal.UnsupportedTemporalTypeException:不支持的字段:DayOfWeek
dd 是月份中的某一天,而不是 DayofWeek。可能被扔了一条红鲱鱼,但这似乎很奇怪。
java - ThreeTen toZonedDateTime:Ant构建时的异常
我有一个引发异常的单元测试,因为它最终会调用
设置
我们最近才开始在我们的项目中使用threeten-bp。
该库被放置在一个中心项目中,并且从引用主项目的项目中抛出异常。
异常发生在由 ant 构建脚本执行的两个单元测试中。我可以在指定的 jenkins-home/workspace/Trunk/Project/build/project.jar 中看到三个 lib,我还可以在其中看到 DB 文件。
从 Eclipse 中运行单元测试不会产生任何异常。
第二个堆栈跟踪表明“已为 TZDB 时区规则版本加载数据:2014c”。调用单元测试使用没有设置时区的日历,所以我假设使用默认时区。
我将日历更改为使用 UTC 时区,现在测试正常工作。但是,我想知道为什么不能使用当地时间。
堆栈跟踪
第一次测试
第二次测试
java - Java 8 时间:以周期步骤迭代一天的 LocalTime
LocalTime
从午夜开始,我想以一定的周期长度迭代s 到一天结束。
例如。如果时间段是 8hr10Minutes 我想要时间:0:00、8:10、16:20(不是 24:30,因为这是第二天)
对于小于一天的时间段,我有以下工作代码。有更好的(尤其是可读性更强的)逻辑吗?
此外,对于等于一天的倍数(无限循环)的时间段,上述操作失败,或者,如果大于一天,则返回数字,就好像时间段被强制转换为短于一天一样,(例如,24hr10min 的行为与 10Minutes 相同),所以如果可以同时修复(没有明确if
的 s)我也会接受它。
java - Java:从 OSGi 应用程序中设置时区
我在 Linux 上运行的嵌入式 Java 应用程序应该允许用户通过 GUI 更改时区。我的应用程序在 OSGI 容器中运行(请参阅下面为什么我认为这是相关的)并且在使用新时区之前不需要重新启动。
从我的 Java/OSGi 应用程序中持久设置时区的推荐方法是什么?
我可以想到以下方法,为此我列出了一些优点和缺点。我错过了什么吗?有什么推荐?:
- 从应用程序中,更改底层操作系统时区,另外
TimeZone.setDefault(...)
用于当前运行的 JVM 并更新所有Clock
持有旧 TZ 的实例(因此需要某种事件)。缺点:这种方法依赖于操作系统并且级别很低,我也想保持操作系统时钟 UTC。优点:操作系统负责存储 TZ,下次启动应用程序时 TZ 会立即正确。 - 从应用程序中,更改
-Duser.timezone=...
用于启动的参数。缺点:非常丑陋,甚至更低级别,但允许将操作系统时钟保留为 UTC,同时让应用程序以正确的 TZ 启动。还需要Clock
在更改时更新实例。 - 不要触摸操作系统,只在启动的早期
TimeZone.setDefault(...)
使用和调用它。这将需要一个单独的持久性(首选项)来保存它。同样,在当前运行的 JVM 中,所有引用旧 TZ 的实例都需要在更改时更新(需要事件)。在 OSGi 容器中运行时,无法保证包的启动顺序,因此我无法确定默认 TZ 在使用之前是否已设置。我如何保证这一点?此外,JSR310 明确建议不要在 Clock 中使用“默认 TZ”。Clock
- 根本不使用“默认”时区,使用单独的全局变量,并在每次
Instant
和LocalXXX
值之间转换时,显式传递时区。这摆脱了需要一个事件来更新Clock
实例。但是我们需要注意不要使用LocalDate.now(clock)
,因为这使用了时钟的 TZ (不再正确)。如何在 OSGi 中有这个全局变量?使用ConfigAdmin
?如何使我无法控制的代码行为正确(例如记录时间戳)?
编辑:为了摆脱更新的需要Clock
,我可以使用一个始终检查默认时区的时钟,但这从性能 POV 来看似乎不是最理想的:
这是一个好主意吗?
编辑 2:
关于我上面的性能问题:它们显然是不合理的。当你调用时LocalDate.now()
,内部SytemClock
会构建一个新的,ZoneID
它通过在 Map 中搜索来设置当前 - 这与使用我上面的代码完全相同DefaultZoneClock
,不同之处在于使用我的代码我可以注入任何其他代码Clock
进行测试。(所有客户端代码都将使用LocalDate.now(clock)
)
下面的答案建议不要更改 JVM TimeZone,而是在必要时根据用户定义的 TimeZone 进行转换,这意味着我必须注意不要使用调用 TimeZone 的 java.time 方法Clock
,例如。如果我需要LocaTime
使用
java - 如何从 ZonedDateTime 转换为 Joda DateTime
我已经切换到三个日期时间,但我仍然有一个第 3 方工具,它使用 joda 将带时区的时间戳写入数据库,我需要从一个转换为另一个。最好的方法是什么?作为一种解决方法,我尝试了 DateTime.parse(zdt.toString) 但它失败了,因为 joda 不喜欢区域格式
无效格式:“2015-01-25T23:35:07.684Z[Europe/London]”在“[Europe/London]”处格式错误
java - 将 ThreeTen 反向移植与 JSR-310 进行比较
由于某些原因,我们现在不能使用 java 8 - 我们仍然停留在 java 7。
但是,我现在想使用新JSR-310 date/time APIs
的,使用官方的 backport ThreeTen。
它的主页说:
问题:
您对 ThreeTen的体验如何?有一些缺点吗?
与官方实现相比,这个项目的兼容性如何
JSR-310
?从 ThreeTen迁移到官方的 java 8实现需要多少努力?
现在迁移到 ThreeTen 并稍后迁移到 JSR-310是否值得- 还是应该等到可以使用 java 8,从而跳过 ThreeTen?
java - ThreeTen-Backport 实现与 JSR-310 的 backport?
注意:这不是Comparing ThreeTen backport to JSR-310的副本。我的问题更具体。
在我的公司,我试图让 DevOps 能够使用 ThreeTen-Backport 重构遗留代码(由于 WebLogic 10.3.6.0 的部署限制,我们无法从 Java 6 升级,也无法使用任何版本的JodaTime 超过 1.2.1 版)。
我可以在 ThreeTen-Backport 的 Github 页面上看到 DevOps 对此声明存在问题:
backport不是JSR-310 的实现,因为这需要跳过许多不必要的障碍。相反,这是一个简单的向后移植,旨在允许用户在 Java SE 6 和 7 上快速使用 JSR-310 API。
当他们问我“不是实现”是什么意思时,我需要能够向他们解释。但是,实现这个词的语义范围很广,我自己也不确定这到底是什么意思。
所以我的问题是,在这样的情况下,实施与反向移植是什么意思?由于 JSR-310 是一个反向端口而不是一个实现,是否有一个我可以使用的反例,那就是其他东西的实现,就像 ThreeTen-Backport不是JSR-310 的实现一样?如果存在这样的东西,Java 6 的 JSR-310的实际实现会是什么样子,它与 ThreeTen-Backport 有何不同?
android - 无法编译 ThreeTenABP
我正在尝试将 Jake Wharton 的 ThreeTenABP 库 - https://github.com/JakeWharton/ThreeTenABP - 用于我的 Android 项目中的 JSR310 日期/时间功能。这个库的主要优点是它比 Jodatime ( http://www.joda.org/joda-time/ ) 和threetenbp ( https://github.com/ThreeTen/threetenbp ) 具有更少的编译开销。但是,ThreeTenABP 库没有在我的项目中编译。我将以下内容放在我的 build.gradle 中:
我得到一个编译错误:
错误:找不到 org.threeten:threetenbp:1.3-SNAPSHOT。要求:MyApp:app:unspecified MyApp:app:unspecified > com.jakewharton.threetenabp:threetenabp:1.0.0-SNAPSHOT 在 build.gradle 文件中搜索
以前有人在 Android 中成功使用过这个库吗?
java - 使用 ThreeTenABP 时如何从 Date 转换为 LocalDate?
注意:这里的 JDK 世界已经很好地回答了这个问题,但接受的答案不适用于JSR-310 的 Android 端口,它没有用于 Date 的扩展 API。
那么,将 a 转换为 的最佳方法是java.util.Date
什么org.threeten.bp.LocalDate
?