问题标签 [zoneddatetime]

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 投票
1 回答
2071 浏览

datetime - ZonedDateTime 中的 XMLGregorianCalendar 格式日期

我有一个函数,它接受 Date 并给出 XMLGregorianCalendar 格式的日期,如下所示,它返回日期作为2017-11-30T00:00:00.000-08:00日期提供为2017-11-30

我正在尝试使用 Java 8 ZonedDateTime 重写上述函数,但将日期设为 。2017-11-29T00:00:00-08:00如何获得与上述函数相同的确切输出?我也不明白为什么日期是 29 而不是 30。

0 投票
1 回答
400 浏览

java - 为 ZonedDateTime 编写 xstream 转换器

为了从 Calendar 更改为 ZonedDateTime (java.time),我必须为 xstream 编写 ZonedDateTime 转换器。在这篇文章中建议https://github.com/x-stream/xstream/issues/24

您实际上可以做的是为 ZonedDateTime 编写一个自定义转换器,其中类型表示为 String。使用此字符串表示形式转换回 ZonedDateTime 实例。<<

我尝试了两种方法:第一种是扩展com.thoughtworks.xstream.converters.basic.AbstractSingleValueConverter,第二种是实现com.thoughtworks.xstream.converters.Converter

这是第二种方法的代码:

我注册转换器:

但我总是得到一个错误:

我能做些什么来解决问题?

0 投票
0 回答
5532 浏览

java - 如何模拟 ZonedDateTime 和 LocalTime?

我在使用 PowerMock时遇到了模拟ZoneDateTime和(Java 8)的问题。LocalTime

我用

对于类和测试方法

不幸的是,前两种情况不模拟静态方法。第三个,我写的“测试”被嘲笑了。

如何模拟ZonedDateTimeLocalTime

我必须确保“现在”指向特定的时间点。我不认为用另一种方法包装 ZoneDatetime.now() 是一个好主意。测试不应影响源代码。

0 投票
3 回答
4068 浏览

java - 在 Java 中将 epoch 转换为 ZonedDateTime

如何在java中转换1413225446.92000纪元ZonedDateTime

给出的代码需要值,因此这将抛出NumberFormatException上面给出的值。

0 投票
1 回答
202 浏览

java - 如何总结两个 ZoneOffset?

我有两个从字符串解析的ZoneOffset对象。我如何总结它们并应用于ZonedDateTime

例如:
原始 ZonedDateTime 是2017-12-27T18:30:00,第一个偏移量是+03,第二个偏移量是+05

如何获得2017-12-28T18:30:00+08:00or的输出2017-12-28T10:30:00

0 投票
1 回答
3627 浏览

java - 规范 CriteriaBuilder 将 ZonedDateTime 转换为 LocalDate 以进行比较

我需要比较一个实体的日期介于两个日期之间,不幸的是我没有得到我需要的结果。标准构建器没有比较日期,而是创建了一个比较日期和时间的查询,这会导致不返回任何结果。我正在使用 Spring Specification 来调用标准构建器。我的问题是我正在使用 ZoneDateTime (我需要这个)来比较日期,我只是想知道是否有距离我可以将两个日期都转换为 LocalDate 所以它会比较'2018-01-12' '2018-01-12 09:45:00'。

标准生成器:

MySQL:

如您所见,上面的查询是比较日期时间,这不是我想要的。

0 投票
2 回答
509 浏览

java - 如何规范 ZonedDateTime 以便 .equals() 工作?

我有代码,类似于:

此处提供代码:https ://ideone.com/43zf8B

问题:

  1. 这些都是类型化的 ZonedDateTime 对象
  2. 根据 .isEqual() 方法,它们是等价的。
  3. 根据 .equals() 方法,它们不等效

然而,我的测试套件对这些日期时间实例所在的类使用 beEquals 操作进行深度匹配,因此我需要一种方法来规范化它们,以便 .equals() 返回 true。

请问我怎样才能使它们正常化?

0 投票
3 回答
10259 浏览

java - ZonedDateTime 比较:预期:[Etc/UTC] 但原为:[UTC]

我正在比较两个似乎相等的日期,但它们包含不同的区域名称:一个是Etc/UTC,另一个是UTC

根据这个问题:UTC 和 Etc/UTC 时区之间有区别吗?- 这两个区域是相同的。但是我的测试失败了:

结果:

更具体地说,我希望这ZoneId.of("UTC")等于ZoneId.of("Etc/UTC"),但事实并非如此!

正如@NicolasHenneaux建议的那样,我可能应该使用compareTo(...)方法。这是个好主意,但zoneDateTimeEtcUtc.compareTo(zoneDateTimeUtc)返回-16值,因为内部的这个实现ZoneDateTime

断言结果:

ZoneId所以问题出在实施的某个地方。但我仍然希望,如果两个区域 id 都有效并且都指定同一个区域,那么它们应该是相等的。

我的问题是:这是一个库错误,还是我做错了什么?

更新

有几个人试图说服我这是一种正常行为,比较方法的实现String使用ZoneId. 在这种情况下,我应该问,为什么以下测试运行正常?

如果Etc/UTC 相同UTC,那么我看到两个选项:

  • compareTo/equals 方法不应使用 ZoneId id,而应比较它们的规则
  • Zone.of(...)已损坏,应将Etc/UTCUTC视为相同的时区。

否则我不明白为什么UTC+0并且UTC工作正常。

UPDATE-2我报告了一个错误,ID:9052414。看看 Oracle 团队会做出什么决定。

UPDATE-3接受的错误报告(不知道他们是否会将其关闭为“无法修复”):https ://bugs.openjdk.java.net/browse/JDK-8196398

0 投票
2 回答
1389 浏览

java - Java ZonedDateTime 和英国夏令时间

我目前正在查看日期在英国夏令时内外时的 ZonedDateTime 行为。

英国夏令时从 3 月 25 日开始,增加一小时 (+1)。

我创建了几个 ZonedDateTime 实例(UTC 和欧洲/伦敦),接下来我添加了 1 个月,以便它们属于 ZonedDateTime。

这是我打印这些日期时的结果:

最后我打印出每个日期的纪元秒数:

我知道 ZonedDateTime 是不可变的。这意味着当我添加一个月时,我实际上创建了一个更改月份的新实例。您能否告诉我我对给定观察结果的假设是否正确:

  1. 添加一个月将创建一个新的 ZonedDateTime 实例。ZonedDateTime 上的小时将始终相同。新日期是否在 BST 中并不重要。(查看 LondonFirstMarch 和 LondonFirstMarchPlusMonth)

  2. 因为在添加 1 个月后 londonFirstMarchPlusMonth 落入 BST 以便它仍然是 12:00 它实际上已经提取了一个小时。这意味着基础纪元秒数将与 utcFirstMarchPlusMonth 不同。

  3. 最后 londonFirstMarchPlusMonthToUtc 当我们将区域转换为 UTC 时,它显示实际时间是 11:00。

  4. 如果我想要一个恰好在 1 个月后的日期。我应该只使用 UTC,最后可以选择将其转换为伦敦/欧洲吗?

编辑:

也许我不够清楚 - 道歉。一个月是任意值,因此当添加到第一个日期时,会产生属于 BST 的第二个日期。

如前所述,也许一个月不是一个很好的例子,因为它的含义取决于我们所处的月份。对我来说,重点是“月份”将由 24 小时单位组成。(正如 Ole.vv 所说)

我认为在 UTC 时间运行并可选择将其转换为欧洲/伦敦是“我的问题”的解决方案

0 投票
0 回答
80 浏览

json - 根据服务器时区处理时区

我需要根据我的服务器时区在我的应用程序中设置时区。我在 IST= Asia/Kolkatta 的服务器时区。在 java8 中,时区可以直接在 @JsonFormat 中设置,如下所示:

我的 dto 类:

这里是时区,我不想硬编码。所以我以这种方式从我的 *.properties 获取时区值:

我当前的系统日期是 07.02.2018,我的 postgres 数据库系统日期也是 07.02.2018。服务器时区是亚洲/加尔各答。

从 DTO,我得到了我发送的正确时区和日期。但是在查看应用程序时,日期实际上是前一天(06.02.2018)。我的时区没有被占用,还是在其他地方被覆盖?我正在使用 java 8、postgres DB 9.6.1 和 Jboss 6.3。我也尝试直接在我的独立设备中设置 JAVA_OPTS = "-Duser.timezone = IST" 。但没有变化。有人可以帮忙吗?

有什么方法可以将我的 timeZone 值直接分配给 @JsonFormat 时区类型?