首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java.util.Date和jodaTime时区

java.util.Date和jodaTime时区
EN

Stack Overflow用户
提问于 2016-03-15 19:31:02
回答 3查看 169关注 0票数 0

从UI (jsf)中,我获得了一个java.util.Date对象(让我们称其为a)。据我所知,这个没有任何时区信息。

然后,我使用这样的代码来执行一些业务逻辑:

代码语言:javascript
复制
Date bar = new DateTime(a).plusDays(1).toDate()

最后,我将这个bar存储到数据库中

我想知道我会不会遇到一些时区问题?因为JodaTime使用来自服务器的时区信息?!

对于数据库,我在我的Oracle DB数据类型DATE上使用@Temporal(TemporalType.*)

背景:我使用JodaTime来增加和减少天/小时/周,因为如果很好的API

EN

回答 3

Stack Overflow用户

发布于 2016-03-16 00:47:55

24小时=1天

你忽略了Jon Skeet的评论。你必须意识到一个事实,一天并不意味着24小时。由于夏令时(DST)等异常情况,一天的运行时间可能长于或短于24小时。

你需要清楚你的情况需要哪一段时间,24小时还是一天。

时区

对于增加的24小时,时区无关紧要。

在确定日期和日期时,时区至关重要。对于任何给定的时刻,日期在世界各地都是不同的。例如,巴黎的新一天比蒙特雷亚尔更早破晓。

此外,时区定义了处理异常情况的规则,例如夏令时(DST)。

如果省略此参数,则应用JVM的当前默认时区。这是有风险的,因为缺省值可能会在运行时的任何时刻被调用TimeZone.setDefault的JVM中任何应用程序的任何线程中的任何代码更改。

我建议您总是通过传递可选参数来指定时区,而不是隐式地依赖于JVM的当前默认值。Locale也是如此。

java.time取代Joda-Time

Joda-Time的制作者继续定义JSR310,JSR310现在被实现为Java8和更高版本中内置的java.time框架。虽然Joda-Time仍然受到积极支持,但制造商已经要求我们在方便的情况下尽快迁移到java.time。

将您的java.util.Date转换为Instant,即时间线上的时刻。

代码语言:javascript
复制
Instant instant = myJavaUtilDate.toInstant();

增加24小时

添加24小时很简单。

代码语言:javascript
复制
Instant instantPlus24Hours = instant.plus( 24 , ChronoUnit.Hours );

添加1天

添加日期需要特定时区的上下文。根据定义,Instant始终使用UTC格式。因此,我们需要应用时区来生成ZonedDateTime

代码语言:javascript
复制
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
ZonedDateTime zdtDayLater = zdt.plusDays( 1 );
票数 2
EN

Stack Overflow用户

发布于 2016-03-15 19:54:03

您的日期将存储在您的本地时区,但在数据库中没有关于时区的信息(假设您不手动处理)。

票数 0
EN

Stack Overflow用户

发布于 2016-03-15 19:54:15

如果你想使用Joda-Time library,因为Date类的各种缺点。你可以的

代码语言:javascript
复制
Date dt = new Date();
DateTime dateOriginal = new DateTime(dt);
DateTime datePlusOne = dateOriginal.plusDays(1);

时区更新:对于时区问题,您可以访问它

代码语言:javascript
复制
LocalDateTime.from(dt.toInstant().atZone(ZoneId.of("UTC"))).plusDays(1);

对于时区相关的问题,您可以查看

  1. Is java.sql.Timestamp timezone specific?
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36010103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档