百里香时区

Thymeleaf timezone

我想在 GMT+6 中获取当前时间,但无法实现。传递 timezone 的正确格式是什么?

我尝试了以下方法 -

[[${#dates.createNowForTimeZone('ASIA/DHAKA')}]]

[[${#dates.createNowForTimeZone("ASIA/DHAKA")}]]

[[${#dates.createNowForTimeZone('GMT+6')}]]
[[${#dates.createNowForTimeZone("GMT+6")}]]

但是,都给在EDT的时间。

我建议您使用 Thymeleaf“extras”库来处理 Java 8 的 java.time classes,并避免任何与旧的和有缺陷的 java.util.Dateclass.

图书馆:

Thymeleaf - Module for Java 8 Time API compatibility

如果您使用的是 Maven,则可以使用以下依赖项将其添加到您的项目中:

<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-java8time</artifactId>
    <version>3.0.4.RELEASE</version>
</dependency>

否则您可以从 here.

手动下载 JAR

安装新的 JAR 后,您可以使用它:

${#temporals.createNowForTimeZone(zoneId)}     // return a instance of java.time.ZonedDateTime

例如如下:

<div th:text="${#temporals.createNowForTimeZone('Asia/Dhaka')}"></div>

或者,使用您问题中的语法,如下所示:

[[${#temporals.createNowForTimeZone('Asia/Dhaka')}]]

示例输出:

2022-05-19T18:57:32.190245400+06:00[Asia/Dhaka]

这是为目标时区生成的,当时我的本地日期时间是 Thu May 19 08:57:32 EDT 2022


关于区域 ID 的注意事项:

您可以阅读有关有效区域 ID 的信息 here。在您的情况下,您需要注意匹配 ID 文本的确切大小写 - 因此它必须是 Asia/Dhaka - 而不是 ASIA/DHAKA.

另见 Where is the official list of zone names for java.time?


格式化注意事项

您可能想要格式化日期字符串,在这种情况下,请查看 here.

列出的各种 #temporals.format() 函数

但您可能还想考虑格式化 Java 中的字符串,以使您的 Thymeleaf 模板不那么混乱。