【发布时间】:2017-06-16 06:59:21
【问题描述】:
我必须在不同时区使用 Java 8 日期/时间。例如:
LocalDateTime dateTime = LocalDateTime.of(2017, Month.JUNE, 1, 13, 39);
Instant instant = dateTime.atZone(ZoneId.of("Europe/Paris")).toInstant();
时间框架是日期时间之间的一个实例
但我不想硬编码时区,这总是一种不好的做法
我在 Java API 中找不到任何常量来表示不同的时区,例如 https://en.m.wikipedia.org/wiki/List_of_tz_database_time_zones
在短区域 ID 中是否有任何映射????
https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html#of-java.lang.String-java.util.Map-
【问题讨论】:
-
你能举个例子你想达到什么。
-
您的示例代码中的
dateTime是什么? -
你的问题写的没有意义。最佳实践是在UTC 中完成大部分工作:您的日志记录、您的业务逻辑、您的数据存储以及您的数据交换/序列化。仅在业务问题需要或向用户展示时才使用时区。 UTC 值的基本 java.time 类是
Instant,如Instant.now()。我相信我们在您最近的其他问题中对此进行了广泛的讨论。 -
如果你想根据
Europe/Paris的时区获得时间,不管你把它称为"Europe/Paris"or"FR"orConstantHoldingClass.EUROPE_PARISorConstantHoldingClass.FR.这就是all“硬编码”。如果您“不想硬编码时区”,则必须将其设置为 your 程序的参数或配置选项。 (除非你想使用systemDefault(),这已经是一个环境选项)…… -
一个想法是将
Europe/Paris放在一个属性文件中,您的应用程序会在启动时或第一次需要时区时读取该文件。这对您来说是否是一个好主意取决于您的需求、架构和开发周期等因素。变体包括将其放入数据库表中。
标签: java date datetime java-8 timezone