问题描述
我在数据库中有一个date字段,它只存储没有时间的日期.现在,我想在jsp页面中显示该日期时知道当前日期和我的日期字段之间的天数.
I have a date field in database which store just date without time. Now I want to know the number of days difference in current date and my date field while displaying that in jsp page.
所以我应该喜欢
databaseDate(2012-11-30) - currentDate(2012-11-27) = 3 days
推荐答案
标准 JSTL .自定义EL功能将是您最好的选择.
There's nothing like that in standard JSTL. A custom EL function would be your best bet.
首先实现一些执行该工作的静态方法:
First implement some static methods which performs the job:
public final class Functions {
private Functions() {}
public static int daysBetween(Date before, Date after) {
// ...
}
public static int daysUntilToday(Date date) {
// ...
}
}
如果您在/WEB-INF/functions.tld
中进行如下注册:
If you register it as follows in /WEB-INF/functions.tld
:
<?xml version="1.0" encoding="UTF-8" ?>
<taglib
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
version="2.1">
<tlib-version>1.0</tlib-version>
<short-name>Custom_Functions</short-name>
<uri>http://example.com/functions</uri>
<function>
<name>daysBetween</name>
<function-class>com.example.Functions</function-class>
<function-signature>boolean daysBetween(java.util.Date, java.util.Date)</function-signature>
</function>
<function>
<name>daysUntilToday</name>
<function-class>com.example.Functions</function-class>
<function-signature>boolean daysUntilToday(java.util.Date)</function-signature>
</function>
</taglib>
然后,只要#{bean.date}
返回一个完全有价值的java.util.Date
:
then you'll be able to use it as follows, provided that #{bean.date}
returns a fullworthy java.util.Date
:
<%@taglib uri="http://example.com/functions" prefix="f" %>
${f:daysUntilToday(bean.date)} days
实施是免费的,您可以选择.我个人更喜欢 Joda Time :
public static int daysBetween(Date before, Date after) {
return Days.daysBetween(new DateTime(before.getTime()), new DateTime(after.getTime())).getDays();
}
public static int daysUntilToday(Date date) {
return Days.daysBetween(new DateTime(date.getTime()), new DateTime()).getDays();
}
或者,如果您受限于标准Java API,请使用众所周知的Calendar
样板文件(不幸的是,JSR-310并未纳入Java 7中,我们必须等待(对于Java 8):
Or if you're restricted to standard Java API, fall back to the well known Calendar
boilerplate (unfortunately, JSR-310 didn't made it into Java 7, we've to wait for Java 8):
public static int daysBetween(Date before, Date after) {
Calendar c1 = createCalendarWithoutTime(before);
Calendar c2 = createCalendarWithoutTime(after);
int days = 0;
for (;c1.before(c2); days++) {
c1.add(Calendar.DATE, 1);
}
return days;
}
public static int daysUntilToday(Date date) {
return daysBetween(date, new Date());
}
private static Calendar createCalendarWithoutTime(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar;
}
这篇关于在jsp中显示日期差异的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!