Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Freemarker中打印日期天数差异时出错_Java_Date_Datetime_Freemarker - Fatal编程技术网

Java 在Freemarker中打印日期天数差异时出错

Java 在Freemarker中打印日期天数差异时出错,java,date,datetime,freemarker,Java,Date,Datetime,Freemarker,我对自由标记日期有问题 我想与日期进行比较,并打印日期差异。 第一个日期被传递给模型(java.util.date) 第二个是freemarker 因此,我正在这样做: <#assign currentDate = .now> <#if currentDate?long < trip.endDate?long> <#-- Not ended --> 它抛出: 无法将日期转换为日期时间 为了确保我使用的对象是java.util.Date,下面是我的Tri

我对自由标记日期有问题

我想与日期进行比较,并打印日期差异。 第一个日期被传递给模型(java.util.date) 第二个是freemarker

因此,我正在这样做:

<#assign currentDate = .now>
<#if currentDate?long < trip.endDate?long> <#-- Not ended -->
它抛出:

无法将日期转换为日期时间

为了确保我使用的对象是
java.util.Date
,下面是我的Trip类:

package com.test.planner.dto;

import java.util.Date;

public class Trip
    implements Comparable<Trip> {

    private Date startDate; // start date
    private Date endDate; // end date

    // ...

    public Date getStartDate() {
        return this.startDate;
    }

    public void setStartDate(Date startDate) {
        this.startDate = startDate;
    }

    public Date getEndDate() {
        return this.endDate;
    }

    public void setEndDate(Date endDate) {
        this.endDate = endDate;
    }

    @Override
    public int compareTo(Trip o) {
        return this.getStartDate().compareTo(o.getStartDate());
    }
}
foo?datetime(“yyyy-MM-dd'T'HH:MM:ssZ”)
表示在
foo
为字符串(也具有给定格式)时使用。然后它将
字符串
转换为
java.util.Date
。但是
.now
已经是
java.util.Date
,所以您不需要也不能用模式转换它。只有字符串必须这样转换。然后两者都可以
?long
-ed,就这样了


对于未来的读者:从2.3.21开始,您应该将ISO 8601字符串转换为日期时间,如
foo?datetime.ISO
。不仅仅是因为它更方便,还因为ISO8601允许很多日期-时间格式模式,当然不可能用一个模式涵盖所有这些模式
?datetime。iso
解决了这个问题。

为什么要调用
?datetime
?因为我提供的链接中说明了:这是错误的吗?因为链接的日期是特定格式的。我现在明白了,我只是误解了
?datetime
的目的。。它只是有一个非常令人困惑的名字。。
<#assign currentDate = .now>
${((trip.startDate?date?datetime("yyyy-MM-dd'T'HH:mm:ssZ")?long - currentDate?datetime("yyyy-MM-dd'T'HH:mm:ssZ")?long) / (1000 * 60 * 60 * 24))?int}
package com.test.planner.dto;

import java.util.Date;

public class Trip
    implements Comparable<Trip> {

    private Date startDate; // start date
    private Date endDate; // end date

    // ...

    public Date getStartDate() {
        return this.startDate;
    }

    public void setStartDate(Date startDate) {
        this.startDate = startDate;
    }

    public Date getEndDate() {
        return this.endDate;
    }

    public void setEndDate(Date endDate) {
        this.endDate = endDate;
    }

    @Override
    public int compareTo(Trip o) {
        return this.getStartDate().compareTo(o.getStartDate());
    }
}
Trip trip = new Trip();
trip.setStartDate(new Date(1410318000000L)); // Wed Sep 10 2014 00:00:00 GMT-0300 (BRT)
trip.setEndDate(new Date(1410318000000L + 691200000L)); // Plus 8 days

mav.addObject("trip", trip);