如何从 FreeMarker 中的 Instant 时间获取日期(例如:星期一)

How to get the day (ex: Monday) from a time Instant in FreeMarker

所以我在 Java 中得到了这个 即时 日期:“2018-05-19T22:00:00Z”。

如何获得星期几?比如星期一..

我正在尝试这个,但它不起作用:

${date?string["EEEE"]}

谢谢

${date?string["EEEE"]} 只要 date 是一个 java.util.Date 对象就可以正常工作。

你可以这样测试:

<#assign date = .now>
${date?string["EEEE"]}

我猜它不起作用,因为你的 date 是一个 String,在这种情况下,你应该在 Java(服务器端)中解析它并公开一个 java.util.Date 模板变量。

我建议您使用 Java 8.Using 日期时间 API 中定义的新日期时间 API 您可以轻松获取与日期和时间相关的所有数据。

Java 8 定义了一个单独的 Enum 来处理星期几,命名为 – DayOfWeek (java.time.DayOfWeek)

java.time.DayOfWeek 是一个枚举,它定义了代表一周七天的 7 个常量——星期一(int value=1)、星期二(2)、星期三(3)……直到星期日(7)。

import java.time.*;

public class Java8Tester {

   public static void main(String args[]) {
      Java8Tester java8tester = new Java8Tester();
      java8tester.testLocalDateTime();
   }

   public void testLocalDateTime() {
      // Get the current date and time
      LocalDateTime currentTime = LocalDateTime.parse("2018-05-19T22:00:00");
      System.out.println("Current DateTime: " + currentTime);


    DayOfWeek dayOfWeek = currentTime.getDayOfWeek();
    System.out.println(currentTime + " was a " + dayOfWeek);
   }
}

此时FreeMarker不支持Java8次,见contribute页面:

What should I contribute?

Usually, contributors come because they want to fix/improve a certain thing. But if you just want to help in general, here are some topics ...

  • Support for Java 8 date/time API-s (this is actually certainly a difficult one). Note that there's a 3rd party solution for this, https://github.com/amedia/freemarker-java-8, but it's not as seamless as a native solution could be.
  • ...

所以你可以查看第三方解决方案。

另请参阅:

  • Java.time (Java 8) support in Freemarker

Freemarker 不适用于 Instant,因此您需要将其转换为 Java 中的字符串(类似于“2018-05-19T22:00:00Z”),然后执行以下操作转换字符串:

<#setting locale="en_US">
${"2018-05-19T22:00:00Z"?datetime.iso?string["EEEE"]}

首先将字符串转换为 iso 格式的日期时间,然后再转换回具有您选择的模式的字符串。

通过更改区域设置,您可以获得不同语言的星期几。

我认为在 Freemarker 中工作的最佳方式是始终使用字符串或整数变量。