我在Java中得到了这个即时日期: "2018-05-19T22:00:00Z"。
如何获取星期几?比如星期一..
我尝试过以下代码,但并不起作用:
${date?string["EEEE"]}
谢谢
我在Java中得到了这个即时日期: "2018-05-19T22:00:00Z"。
如何获取星期几?比如星期一..
我尝试过以下代码,但并不起作用:
${date?string["EEEE"]}
谢谢
Freemarker不支持Instant类型,因此您需要在Java中将其转换为字符串(例如“2018-05-19T22:00:00Z”),然后按以下方式转换字符串:
<#setting locale="en_US">
${"2018-05-19T22:00:00Z"?datetime.iso?string["EEEE"]}
首先将字符串转换为ISO格式的日期时间,然后再按照所选模式将其转换回字符串。
通过改变区域设置,您可以获得不同语言的星期几。
我认为在Freemarker中工作的最佳方式是始终使用字符串或整数变量。
所以您可以查看第三方解决方案。我应该做出什么贡献?
通常,贡献者来到这里是因为他们想要修复/改进某个特定的东西。但如果您只是想一般性地帮助,这里有一些主题......
- 支持Java 8日期/时间API(实际上肯定很困难)。请注意,有第三方解决方案可用,https://github.com/amedia/freemarker-java-8,但它不像本机解决方案那样无缝。
- ...
${date?string["EEEE"]}
只有在 date
是一个 java.util.Date
对象时才能正常工作。
您可以通过以下方式进行测试:
<#assign date = .now>
${date?string["EEEE"]}
我猜这不起作用是因为你的date
是一个String
,在这种情况下你应该在Java(服务器端)中解析它,并向模板公开一个java.util.Date
变量。
我建议您使用Java 8中定义的新日期时间API。使用日期时间API,您可以轻松获取与日期和时间相关的所有数据。
Java 8还定义了一个专门处理星期几的枚举——DayOfWeek(java.time.DayOfWeek)
java.time.DayOfWeek是一个枚举,定义了7个常量,代表一周的七天:星期一(int值=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);
}
}