Java 在Freemarker中打印日期天数差异时出错
我对自由标记日期有问题 我想与日期进行比较,并打印日期差异。 第一个日期被传递给模型(java.util.date) 第二个是freemarkerJava 在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
因此,我正在这样做:
<#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);