如何从FreeMarker中的瞬间获得一天(例如:星期一)

时间:2018-05-17 06:42:51

标签: java date freemarker

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

我怎样才能获得一周中的哪一天?像星期一..

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

${date?string["EEEE"]}

由于

4 个答案:

答案 0 :(得分:1)

此时FreeMarker不支持Java 8时间,请参阅contribute页面:

  

我应该贡献什么?

     

通常,贡献者会来,因为他们想要修复/改进某件事。但是,如果你只是想提供一般的帮助,这里有一些话题......

     
      
  • 支持Java 8日期/时间API-s(这实际上肯定是一个困难的)。请注意,有一个第三方解决方案,https://github.com/amedia/freemarker-java-8,但它不像原生解决方案那样无缝。
  •   
  • ...
  •   

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

另见:

答案 1 :(得分:1)

Freemarker不能与Instant一起使用,因此您需要将其转换为Java中的字符串(类似“ 2018-05-19T22:00:00Z”),然后按照以下步骤转换字符串:

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

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

通过更改语言环境设置,您可能会获得星期几的不同语言版本。

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

答案 2 :(得分:0)

只要${date?string["EEEE"]}date对象,

java.util.Date就可以正常工作。

您可以这样测试:

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

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

答案 3 :(得分:0)

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

Java 8定义了一个单独的Enum来处理名为-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);
   }
}