快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

JSP中日期的用法

在开发有关日历的应用程序时,不规则的每月日期数、每周天数和周末的计算一直是个很费脑筋的问题。结果,日期和时间的编程常常令程序员新手畏缩不前。本文将演示在JSP应用程序中日期的用法,为读者完成某些常见任务提供方便的参考。


目的



示例应用程序的目的是:

通过HTML表单把日期参数提交某个JSP页来处理。
接收日期参数并创建Calendar对象。
采用Calendar对象找出提交的日期是一周的第几天以及选中月份里有多少工作日。
用用户易于阅读的显示格式对日期格式化。

环境

示例程序代码在Java Web服务器上接受测试,该服务器配置了JDK 1.31。示例写得很标准,在Tomcat或者其他JSP Web服务器(JDK 1.2或者以后版本)上运行的效果几乎完全相同。

通过表单把日期传递给JSP页

Date(日期)参数是用户从3栏下拉列表中选出来的。用户提交表单之后,这些参数即被传送给处理页面。

在进行日历编程时不要忘了导入java.util.Calendar:
〈%@ page import="java.util.Calendar" %〉

处理页面的第1个任务是接收以下日期参数值:Date、Month和Year。
int curDate = 1;
if(request.getParameter("curDate") != null)
{
curDate = Integer.parseInt(request.getParameter("curDate"));
}

注重页面参数被转变为int类型,立刻我们就知道为什么要这么做了。



Calendar对象

我们的目标是创建和设置一个Calendar对象,用它进行日期计算。为此,我们首先需要实例化一个Calendar对象。
Calendar cal = Calendar.getInstance();

Calendar.getInstance()返回一个代表当前日期和时间的Calendar对象。
cal.clear();
cal.set(curYear, curMonth , curDate);

clear()方式清空Calendar,这样我们才可能给该对象分配我们自己的日期值并为将来的计算做好预备。注重这些参数的顺序:首先是年,最后是日期。



从Calendar获取信息

以下是一组Calendar字段:

日期
DATE, DAY_OF_MONTH, DAY_OF_WEEK, DAY_OF_YEAR

时间
HOUR_OF_DAY, MINUTE, MILLISECOND, SECOND


WEEK_OF_MONTH, WEEK_OF_YEAR


YEAR

以上这些字段都可以通过Calendar的get()方式进行访问,结果返回一个整数。以下代码示例显示了以上过程。

一周内的日期
int dayOfWeek = cal.get(cal.DAY_OF_WEEK);
out.print("〈br〉Day of Week: " + dayOfWeek + " 〈br〉");

一月内的日期
int dayOfMonth = cal.get(cal.DAY_OF_MONTH);
out.print("〈br〉Day of Month: " + dayOfMonth + " 〈br〉");

定位特定的日期



为了找出一周内特定的某一天就必须访问DAY_OF_WEEK字段。该字段包含了范围从1到7的整数值,1代表星期一,2代表星期二,其余以次类推。
int dayOfWeek = cal.get(cal.DAY_OF_WEEK);

这里有个向用户显示日期的好方式,那就是声明一个包含一周内天数的数组。然后就可以很方便地显示各个日期了。只要采用DAY_OF_WEEK整数访问数组内的当前日期即可。
String[] weekdays = new String[]
{“”, "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
〈%=weekdays[cal.get(cal.DAY_OF_WEEK)]%〉

注重该数组的第1个元素为空。这是因为DAY_OF_WEEK字段值的范围是从1到7,而数组元素的引用范围则是从0到6。在数组开头加一个空元素就可以保证DAY_OF_WEEK字段的值和数组引用相匹配了。



找出周末
为了找出某天是否正好是星期天或者星期六可以编写以下代码:
int day = cal.get(cal.DAY_OF_WEEK);
if(day == 6 || day == 7)
{
//执行与周末有关的操作
}



工作日

现在我们需要计算出某个月内的工作日天数。用户输入日期(参看index.jsp)之后把参数发送给处理页面(参看display.jsp)。在处理页面上,我们把Calendar对象设置为该月的第1天。
cal.clear();
cal.set(curYear, curMonth , 1);
int maxDays = cal.getActualMaximum(cal.DATE);
out.print("〈br〉Number of days in month: " + maxDays + "〈br〉");

我们还需要知道某个月内到底有多少天。getActualMaximum()方式返回一个整数值,该值就包含了每个月内的最多天数:2月是28天,3月是31天等等。在闰年的话2月的天数返回 29天。

一旦我们得到了每个月内的最多天数,我们就可以很方便地循环每月天数判定是否是周末或者工作一日。我们用add()方式给Calendar递增1,如程序清单A所示。



用SimpleDateFormat向用户显示日期

SimpleDateFormat处理显示日期的最常用需求,它可以用来把日期转变为特定的保存格式。你可以采用以下的导入指示符:
〈%@ page import="java.text.SimpleDateFormat" %〉

以下的代码给用户显示日期:
SimpleDateFormat formatter = new SimpleDateFormat("dd/MMM/yyyy");
out.print("〈br〉" + formatter.format(cal.getTime()) );

SimpleDateFormat对象接受一个字符串作为其对象构造器,该字符串参数包含了用户希望采用的显示格式。这个格式字符串可以包含额外的格式字符串,比如空格(“ ”)、反斜线( “/”)和破折号(“-”)。

表A列出了所有有效的(常用的)显示格式。

表A

格式
示例

“dd/MMM/yyyy”
06/Mar/1974

"dd-MM-yyyy"
06-03-1974

"dd MMMMMMMMM yyyy"
06 March 1974

"EEEEEEEEE, MMMMMMMMM dd, yyyy"
Wednesday, March 06, 1974


有效的SimpleDateFormat显示格式



表B是SimpleDateFormat参数的缩略语表。

表B

y
year

M
month in year

d
day in month

D
day in year

w
week in year

W
week in month

E
day in week


SimpleDateFormat参数


重用代码--FormatTitle

在同一页面上实施多种格式转变有个简朴方式:在Declaration元素中是声明FormatTitle方式,它接受两个参数,一个引用Calendar对象,另一个返回格式。
〈%!
public String FormatTitle(Calendar fCal, String format)
{
SimpleDateFormat formatter = new SimpleDateFormat(format);
return (formatter.format(fCal.getTime() ));
}
%〉

为了显示日期,我们调用FormatTitle()并为其传递Calendar和格式字符串参数。
〈%=FormatTitle(cal, “dd-MMM-yyyy”)%〉


小结

学完以上的简朴教程,相信你现在应该能用Calendar和SimpleDateFormat对象操作和显示日期了。

add()和set()方式可以轻松配置Calendar,促使你可以为商业应用程序遍历月份和年数。FormatTitle方式可以大大简化给用户显示日期的任务,同样的,它还简化了把日期转变为字符串的操作,而这一操作主要应用在数据库和XML文档的数据保存方面。
返回类别: 教程
上一教程: PHP4在WINXP下IIS和APACHE2服务器上的安装实例
下一教程: 初次接触JSP(WIN2K SERVER)JSP连接MYSQL数据库

您可以阅读与"JSP中日期的用法"相关的教程:
· java关于日期的运算等处理方式
· js中判定由字符串from和to代表的两个日期的先后关系
· JDK5.0中注释(Annotation)的用法
· java.util.Calendar的用法。
· java中有关日期的显示问题
    微笑服务 优质保证 索取样品