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

4

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

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

我尝试过以下代码,但并不起作用:

${date?string["EEEE"]}

谢谢

4个回答

4

Freemarker不支持Instant类型,因此您需要在Java中将其转换为字符串(例如“2018-05-19T22:00:00Z”),然后按以下方式转换字符串:

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

首先将字符串转换为ISO格式的日期时间,然后再按照所选模式将其转换回字符串。

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

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


1
此时,FreeMarker不支持Java 8时间。请参阅贡献页面:

我应该做出什么贡献?

通常,贡献者来到这里是因为他们想要修复/改进某个特定的东西。但如果您只是想一般性地帮助,这里有一些主题......

所以您可以查看第三方解决方案。
另请参阅:

0

${date?string["EEEE"]} 只有在 date 是一个 java.util.Date 对象时才能正常工作。

您可以通过以下方式进行测试:

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

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


不,它不是一个字符串,它是一个实例(如所述)。 - Jasper de Vries

0

我建议您使用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);
   }
}

@sanjeev51 这个怎么在 FreeMarker 模板中使用? - Jasper de Vries

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接