我在Java中有一些API,它们接受时间作为字符串。
UI发送类似于"10:00:00"的普通字符串。我正在创建一个LocalTime,并将其保存在db (MySQL)中。
稍后,在另一个API中,我使用一个LocalDate对象和上面使用区域UTC的时间来创建一个保存到数据库中的ZonedDateTime对象。我的问题是,时间不是被转换为世界协调时。
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,我这样做:
ZonedDateTime.of(LocalDate.now(ZoneId.of("UTC")),dto.getStart(), ZoneId.of("UTC")).getOffset().getTotalSeconds();它以秒表示0。
编辑::
ZoneId z = ZoneId.of("Asia/Calcutta");
ZoneId z1 = ZoneId.of("UTC");
TimeZone.getTimeZone(z).getRawOffset();尝试了这一点,这就给出了ms的区别。如果UI发送实际的本地区域,我将尝试使用此方法。会更新..。
发布于 2018-02-01 08:31:19
现在,我们已经决定允许UI将时间更改为它的时区。服务器的JVM时区设置为UTC.
发布于 2018-01-29 15:16:16
如果输入与本地时间相对应,则可以创建一个ZonedDateTime以获取印度时区的当前日期,设置时间,然后将其转换为UTC:
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")。
发布于 2018-01-24 14:51:47
我建议不要将ZonedDateTime存储在MySQL数据库中。MySQL时间戳不存储时区信息,因此不能保证您将得到与您保存的时间相同的时间。
相反,我会在UTC上存储一个LocalDateTime和标准化的内部时间,然后在需要显示等等时用时区格式化。要获得UTC的当前时间,您可以这样做。
LocalDateTime now = LocalDateTime.now(Clock.systemUTC());要为今天构建UTC时间戳和提供的时间,您可以这样做。
LocalTime time = getTime();
LocalDateTime = LocalDateTime.of(LocalDate.now(Clock.systemUTC()), time);若要使用当前时区的日期构建时间戳,请将所提供的时间转换为UTC以保存到数据库。
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);https://stackoverflow.com/questions/48424683
复制相似问题