我想将 19:19:00 等时间格式化为不同的时区。如果我使用 SimpleDateFormat
它总是考虑纪元的开始:1970.01.01。
某些时区在纪元开始时和现在有不同的偏移量。例如,现在与欧洲/基辅的默认偏移量是 UTC+0200,但在 1970 年它是 UTC+0300。这意味着,如果我在欧洲/基辅下运行服务器,则在欧洲/柏林(UTC+0100)下登录的客户端将看到三个小时的差异,而不是两个小时。
我可以通过为java.sql.Time
编写自定义格式化程序来解决这个问题。但我想问也许有一些通用的方法或Java工具/库可以解决这个问题。
另一个解决方案可以使用 joda-time:
TimeZone.setDefault(TimeZone.getTimeZone("Europe/Kiev"));
DateTimeZone.setDefault(DateTimeZone.forID("Europe/Kiev"));
DateTimeFormat.forPattern("HH:mm:ss.SSS")
.withZone(DateTimeZone.forID("Europe/Berlin"))
.print(Time.valueOf("19:00:00").getTime());
最佳答案
您不能仅仅将时间格式化为不同的时区。你需要一个约会。
如果您想假设该时间的日期是今天,您可以尝试以下代码:
ZoneId originalZone = ZoneId.of("Europe/Kiev");
ZoneId targetZone = ZoneId.of("Europe/Berlin");
LocalTime originalTime = LocalTime.parse("19:19:00");
LocalTime convertedTime = LocalDate.now(originalZone)
.atTime(originalTime)
.atZone(originalZone)
.withZoneSameInstant(targetZone)
.toLocalTime();
System.out.println(convertedTime);
关于java - 在不同时区之间格式化时间的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50601391/