为了找出一周内特定的某一天就必须访问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处理显示日期的最常用需求,它可以用来把日期转换为特定的保存格式。你可以采用以下的导入指示符:
<%@ 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参数
在同一页面上实施多种格式转换有个简单方法:在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文档的数据保存方面。