首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用java 8将时间转换为UTC

问使用java 8将时间转换为UTC
EN

Stack Overflow用户
提问于 2018-01-24 14:20:31
回答 3查看 10K关注 0票数 1

我在Java中有一些API,它们接受时间作为字符串。

UI发送类似于"10:00:00"的普通字符串。我正在创建一个LocalTime,并将其保存在db (MySQL)中。

稍后,在另一个API中,我使用一个LocalDate对象和上面使用区域UTC的时间来创建一个保存到数据库中的ZonedDateTime对象。我的问题是,时间不是被转换为世界协调时。

代码语言:javascript
复制
ZonedDateTime.of(LocalDate.now(ZoneId.of("UTC")),LocalTime.now(ZoneId.of("UTC")), ZoneId.of("UTC"));
ZonedDateTime.of(LocalDate.now(ZoneId.of("UTC")),dto.getStart(), ZoneId.of("UTC"));

这两个是不同的,虽然我是派去07:00:00,这是我在印度的时间。请指导我如何将独处的时间转换为世界协调时。

编辑::我已经将jvm Duser.Timezone设置为UTC.When,我这样做:

代码语言:javascript
复制
ZonedDateTime.of(LocalDate.now(ZoneId.of("UTC")),dto.getStart(), ZoneId.of("UTC")).getOffset().getTotalSeconds();

它以秒表示0。

编辑::

代码语言:javascript
复制
ZoneId z = ZoneId.of("Asia/Calcutta");
ZoneId z1 = ZoneId.of("UTC");
TimeZone.getTimeZone(z).getRawOffset();

尝试了这一点,这就给出了ms的区别。如果UI发送实际的本地区域,我将尝试使用此方法。会更新..。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-01 08:31:19

现在,我们已经决定允许UI将时间更改为它的时区。服务器的JVM时区设置为UTC.

票数 1
EN

Stack Overflow用户

发布于 2018-01-29 15:16:16

如果输入与本地时间相对应,则可以创建一个ZonedDateTime以获取印度时区的当前日期,设置时间,然后将其转换为UTC:

代码语言:javascript
复制
LocalTime time = LocalTime.parse("10:00:00"); // 10 AM

ZonedDateTime utc = ZonedDateTime
    .now(ZoneId.of("Asia/Calcutta")) // current date/time in India
    .with(time) // set time to 10 AM
    .withZoneSameInstant(ZoneOffset.UTC); // convert to UTC

变量utc的值将是2018-01-29T04:30Z (今天,1月29日运行代码)。世界协调时的时间是凌晨4:30,相当于印度上午10点。

我相信MySQL无法保存ZonedDateTime,所以您可以首先通过调用utc.toInstant()将其转换为Instant。或者,如果您使用的驱动程序是一个较旧的版本,并且只适用于java.util.Date,则可以使用Date.from(utc.toInstant())转换它。

还请注意,我使用了常量ZoneOffset.UTC,它相当于(但比IMO)调用ZoneId.of("UTC")。

票数 2
EN

Stack Overflow用户

发布于 2018-01-24 14:51:47

我建议不要将ZonedDateTime存储在MySQL数据库中。MySQL时间戳不存储时区信息,因此不能保证您将得到与您保存的时间相同的时间。

相反,我会在UTC上存储一个LocalDateTime和标准化的内部时间,然后在需要显示等等时用时区格式化。要获得UTC的当前时间,您可以这样做。

代码语言:javascript
复制
LocalDateTime now = LocalDateTime.now(Clock.systemUTC());

要为今天构建UTC时间戳和提供的时间,您可以这样做。

代码语言:javascript
复制
LocalTime time = getTime();
LocalDateTime = LocalDateTime.of(LocalDate.now(Clock.systemUTC()), time);

若要使用当前时区的日期构建时间戳,请将所提供的时间转换为UTC以保存到数据库。

代码语言:javascript
复制
ZoneId timezone = ZoneId.of("Asia/Calcutta");
LocalTime time = getTime();
ZonedDateTime zdt = ZonedDateTime.of(LocalDate.now(timezone), time, timezone);
LocalDateTime utcDateTime = LocalDateTime.ofInstant(zdt.toInstant(), ZoneOffset.UTC);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48424683

复制
相关文章

相似问题

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