本文介绍了在jsp中显示日期差异的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在数据库中有一个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中显示日期差异的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-29 03:41