如何从 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 中工作的最佳方式是始终使用字符串或整数变量。
所以我在 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 中工作的最佳方式是始终使用字符串或整数变量。