JSP中日期的用法
發(fā)表時(shí)間:2024-02-16 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]在開(kāi)發(fā)有關(guān)日歷的應(yīng)用程序時(shí),不規(guī)則的每月日期數(shù)、每周天數(shù)和周末的計(jì)算一直是個(gè)很費(fèi)腦筋的問(wèn)題。結(jié)果,日期和時(shí)間的編程經(jīng)常令程序員新手畏縮不前。本文將演示在JSP應(yīng)用程序中日期的用法,為讀者完成某些常見(jiàn)任務(wù)提供方便的參考。 目的 示例應(yīng)用程序的目的是: 通過(guò)HTML表單把日期參數(shù)提交某個(gè)JSP頁(yè)來(lái)處理...
在開(kāi)發(fā)有關(guān)日歷的應(yīng)用程序時(shí),不規(guī)則的每月日期數(shù)、每周天數(shù)和周末的計(jì)算一直是個(gè)很費(fèi)腦筋的問(wèn)題。結(jié)果,日期和時(shí)間的編程經(jīng)常令程序員新手畏縮不前。本文將演示在JSP應(yīng)用程序中日期的用法,為讀者完成某些常見(jiàn)任務(wù)提供方便的參考。
目的
示例應(yīng)用程序的目的是:
通過(guò)HTML表單把日期參數(shù)提交某個(gè)JSP頁(yè)來(lái)處理。
接收日期參數(shù)并創(chuàng)建Calendar對(duì)象。
采用Calendar對(duì)象找出提交的日期是一周的第幾天以及選中月份里有多少工作日。
用用戶易于閱讀的顯示格式對(duì)日期格式化。
環(huán)境
示例程序代碼在Java Web服務(wù)器上接受測(cè)試,該服務(wù)器配置了JDK 1.31。示例寫(xiě)得很標(biāo)準(zhǔn),在Tomcat或者其他JSP Web服務(wù)器(JDK 1.2或者以后版本)上運(yùn)行的效果幾乎完全一樣。
通過(guò)表單把日期傳遞給JSP頁(yè)
Date(日期)參數(shù)是用戶從3欄下拉列表中選出來(lái)的。用戶提交表單之后,這些參數(shù)即被傳送給處理頁(yè)面。
在進(jìn)行日歷編程時(shí)不要忘了導(dǎo)入java.util.Calendar:
〈%@ page import="java.util.Calendar" %〉
處理頁(yè)面的第1個(gè)任務(wù)是接收以下日期參數(shù)值:Date、Month和Year。
int curDate = 1;
if(request.getParameter("curDate") != null)
{
curDate = Integer.parseInt(request.getParameter("curDate"));
}
注意頁(yè)面參數(shù)被轉(zhuǎn)換為int類型,馬上我們就知道為什么要這么做了。
Calendar對(duì)象
我們的目標(biāo)是創(chuàng)建和設(shè)置一個(gè)Calendar對(duì)象,用它進(jìn)行日期計(jì)算。為此,我們首先需要實(shí)例化一個(gè)Calendar對(duì)象。
Calendar cal = Calendar.getInstance();
Calendar.getInstance()返回一個(gè)代表當(dāng)前日期和時(shí)間的Calendar對(duì)象。
cal.clear();
cal.set(curYear, curMonth , curDate);
clear()方法清空Calendar,這樣我們才可能給該對(duì)象分配我們自己的日期值并為將來(lái)的計(jì)算做好準(zhǔn)備。注意這些參數(shù)的順序:首先是年,最后是日期。
從Calendar獲取信息
以下是一組Calendar字段:
日期
DATE, DAY_OF_MONTH, DAY_OF_WEEK, DAY_OF_YEAR
時(shí)間
HOUR_OF_DAY, MINUTE, MILLISECOND, SECOND
周
WEEK_OF_MONTH, WEEK_OF_YEAR
年
YEAR
以上這些字段都可以通過(guò)Calendar的get()方法進(jìn)行訪問(wèn),結(jié)果返回一個(gè)整數(shù)。以下代碼示例顯示了以上過(guò)程。
一周內(nèi)的日期
int dayOfWeek = cal.get(cal.DAY_OF_WEEK);
out.print("〈br〉Day of Week: " + dayOfWeek + " 〈br〉");
一月內(nèi)的日期
int dayOfMonth = cal.get(cal.DAY_OF_MONTH);
out.print("〈br〉Day of Month: " + dayOfMonth + " 〈br〉");
定位特定的日期
為了找出一周內(nèi)特定的某一天就必須訪問(wèn)DAY_OF_WEEK字段。該字段包含了范圍從1到7的整數(shù)值,1代表星期一,2代表星期二,其余以次類推。
int dayOfWeek = cal.get(cal.DAY_OF_WEEK);
這里有個(gè)向用戶顯示日期的好方法,那就是聲明一個(gè)包含一周內(nèi)天數(shù)的數(shù)組。然后就可以很方便地顯示各個(gè)日期了。只要采用DAY_OF_WEEK整數(shù)訪問(wèn)數(shù)組內(nèi)的當(dāng)前日期即可。
String[] weekdays = new String[]
{“”, "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
〈%=weekdays[cal.get(cal.DAY_OF_WEEK)]%〉
注意該數(shù)組的第1個(gè)元素為空。這是因?yàn)镈AY_OF_WEEK字段值的范圍是從1到7,而數(shù)組元素的引用范圍則是從0到6。在數(shù)組開(kāi)頭加一個(gè)空元素就可以保證DAY_OF_WEEK字段的值和數(shù)組引用相匹配了。
找出周末
為了找出某天是否正好是星期天或者星期六可以編寫(xiě)以下代碼:
int day = cal.get(cal.DAY_OF_WEEK);
if(day == 6 day == 7)
{
//執(zhí)行與周末有關(guān)的操作
}
工作日
現(xiàn)在我們需要計(jì)算出某個(gè)月內(nèi)的工作日天數(shù)。用戶輸入日期(參看index.jsp)之后把參數(shù)發(fā)送給處理頁(yè)面(參看display.jsp)。在處理頁(yè)面上,我們把Calendar對(duì)象設(shè)置為該月的第1天。
cal.clear();
cal.set(curYear, curMonth , 1);
int maxDays = cal.getActualMaximum(cal.DATE);
out.print("〈br〉Number of days in month: " + maxDays + "〈br〉");
我們還需要知道某個(gè)月內(nèi)到底有多少天。getActualMaximum()方法返回一個(gè)整數(shù)值,該值就包含了每個(gè)月內(nèi)的最多天數(shù):2月是28天,3月是31天等等。在閏年的話2月的天數(shù)返回 29天。
一旦我們得到了每個(gè)月內(nèi)的最多天數(shù),我們就可以很方便地循環(huán)每月天數(shù)判斷是否是周末或者工作一日。我們用add()方法給Calendar遞增1,如程序清單A所示。
用SimpleDateFormat向用戶顯示日期
SimpleDateFormat處理顯示日期的最常用需求,它可以用來(lái)把日期轉(zhuǎn)換為特定的保存格式。你可以采用以下的導(dǎo)入指示符:
〈%@ page import="java.text.SimpleDateFormat" %〉
以下的代碼給用戶顯示日期:
SimpleDateFormat formatter = new SimpleDateFormat("dd/MMM/yyyy");
out.print("〈br〉" + formatter.format(cal.getTime()) );
SimpleDateFormat對(duì)象接受一個(gè)字符串作為其對(duì)象構(gòu)造器,該字符串參數(shù)包含了用戶希望采用的顯示格式。這個(gè)格式字符串可以包含額外的格式字符串,比如空格(“ ”)、反斜線( “/”)和破折號(hào)(“-”)。
表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參數(shù)的縮略語(yǔ)表。
表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參數(shù)
重用代碼--FormatTitle
在同一頁(yè)面上實(shí)施多種格式轉(zhuǎn)換有個(gè)簡(jiǎn)單方法:在Declaration元素中是聲明FormatTitle方法,它接受兩個(gè)參數(shù),一個(gè)引用Calendar對(duì)象,另一個(gè)返回格式。
〈%!
public String FormatTitle(Calendar fCal, String format)
{
SimpleDateFormat formatter = new SimpleDateFormat(format);
return (formatter.format(fCal.getTime() ));
}
%〉
為了顯示日期,我們調(diào)用FormatTitle()并為其傳遞Calendar和格式字符串參數(shù)。
〈%=FormatTitle(cal, “dd-MMM-yyyy”)%〉
小結(jié)
學(xué)完以上的簡(jiǎn)單教程,相信你現(xiàn)在應(yīng)該能用Calendar和SimpleDateFormat對(duì)象操作和顯示日期了。
add()和set()方法可以輕松配置Calendar,促使你可以為商業(yè)應(yīng)用程序遍歷月份和年數(shù)。FormatTitle方法可以大大簡(jiǎn)化給用戶顯示日期的任務(wù),同樣的,它還簡(jiǎn)化了把日期轉(zhuǎn)換為字符串的操作,而這一操作主要應(yīng)用在數(shù)據(jù)庫(kù)和XML文檔的數(shù)據(jù)保存方面。