今天主要学习的日期操作主要是—–获取日期字段(年月日年中的天数年中的周数等)计算两个时间的间隔日期(年月天)根据开始时间间隔时间计算结束时间
关于Calendar日历的字段值一些比较重要的如下
常规的年月日时分秒
static int YEAR
指示年的 get 和 set 的字段数字
static int MONTH
指示月份的 get 和 set 的字段数字
static int DATE
get 和 set 的字段数字指示一个月中的某天
static int HOUR
get 和 set 的字段数字指示上午或下午的小时
static int MINUTE
get 和 set 的字段数字指示一小时中的分钟
static int SECOND
get 和 set 的字段数字指示一分钟中的秒
比较有用的几个字段
static int DAY_OF_YEAR
get 和 set 的字段数字指示当前年中的天数
static int WEEK_OF_YEAR
get 和 set 的字段数字指示当前年中的星期数
static int WEEK_OF_MONTH
get 和 set 的字段数字指示当前月中的星期数
static int DAY_OF_WEEK
get 和 set 的字段数字指示一个星期中的某天
下面是关于日期计算的测试代码虽然较长但是调理很清晰
/**
* 日期类DateCalendar测试类
*
*/
package comdate_test;
import javatextDateFormat;
import javatextParseException;
import javatextSimpleDateFormat;
import javautilCalendar;
import javautilDate;
/**
* @author wkupaochuan
* @time Jun
* @version V
*
* 实现的接口如下
* 根据开始时间和间隔天数计算结束时间 Date calculateEndDate(Date sDate int days)
* 根据开始时间结束时间间隔类型(年月日)计算间隔时间 int calInterval(Date sDate Date eDate String type)
* 输出日历实例(当前时间)的各个字段值 void printFields(Calendar cNow)
* 判定某个年份是否是闰年 boolean isLeapYear(int year)
* 比较两个日期的大小 int compareDate(Date sDate Date eDate)
*/
public class Calendar_test {
public static void main(String agrs[])
{
//获取日历实例并赋予当前时间
Calendar cNow = CalendargetInstance()
cNowsetTime(new Date())
//输出日历相关字段
printFields(cNow)
/*计算两个日期的时间间隔*/
//开始时间
Date sDate = new Date()
//结束时间
try {
Date eDate = (new SimpleDateFormat(yyyyMMdd))parse()
//计算结果并输出
Systemoutprintln(今天与相隔 + calInterval(sDate eDate d) + 天)
} catch (ParseException e) {
// TODO Autogenerated catch block
eprintStackTrace()
}
/*计算结束日期并输出*/
SimpleDateFormat df = (SimpleDateFormat)DateFormatgetInstance()
dfapplyPattern(yyyyMMdd)
Systemoutprintln(从几天开始计算天后是 + dfformat(calculateEndDate(sDate )))
}
/**
* 根据起始日期和间隔时间计算结束日期
*
* @param sDate开始时间
*
* @param days间隔时间
*
* @return 结束时间
* */
public static Date calculateEndDate(Date sDate int days)
{
//将开始时间赋给日历实例
Calendar sCalendar = CalendargetInstance()
sCalendarsetTime(sDate)
//计算结束时间
sCalendaradd(CalendarDATE days)
//返回Date类型结束时间
return sCalendargetTime()
}
/**
* 计算两个日期的时间间隔
*
* @param sDate开始时间
*
* @param eDate结束时间
*
* @param type间隔类型(Y/y年 M/m月 D/d日)
*
* @return interval时间间隔
* */
private static int calInterval(Date sDate Date eDate String type)
{
//时间间隔初始为
int interval = ;
/*比较两个日期的大小如果开始日期更大则交换两个日期*/
//标志两个日期是否交换过
boolean reversed = false;
if(compareDate(sDate eDate) > )
{
Date dTest = sDate;
sDate = eDate;
eDate = dTest;
//修改交换标志
reversed = true;
}
/*将两个日期赋给日历实例并获取年月日相关字段值*/
Calendar sCalendar = CalendargetInstance()
sCalendarsetTime(sDate)
int sYears = sCalendarget(CalendarYEAR)
int sMonths = sCalendarget(CalendarMONTH)
int sDays = sCalendarget(CalendarDAY_OF_YEAR)
Calendar eCalendar = CalendargetInstance()
eCalendarsetTime(eDate)
int eYears = eCalendarget(CalendarYEAR)
int eMonths = eCalendarget(CalendarMONTH)
int eDays = eCalendarget(CalendarDAY_OF_YEAR)
//年
if(cTrim(type)equals(Y) || cTrim(type)equals(y))
{
interval = eYears sYears;
if(eMonths < sMonths)
{
interval;
}
}
//月
else if(cTrim(type)equals(M) || cTrim(type)equals(m))
{
interval = * (eYears sYears)
interval += (eMonths sMonths)
}
//日
else if(cTrim(type)equals(D) || cTrim(type)equals(d))
{
interval = * (eYears sYears)
interval += (eDays sDays)
//除去闰年天数
while(sYears < eYears)
{
if(isLeapYear(sYears))
{
interval;
}
++sYears;
}
}
//如果开始日期更大则返回负值
if(reversed)
{
interval = interval;
}
//返回计算结果
return interval;
}
/**
* 输出日历相关字段(当前日期)
*
* @param cNow当前时间
*
* @return null
*
* 各个字段值都可以用get(field)得到也可以用set(field value)函数修改
* */
private static void printFields(Calendar cNow)
{
//先用Date类型输出验证
SimpleDateFormat df = (SimpleDateFormat)DateFormatgetInstance()
dfapplyPattern(yyyyMMdd HH:mm:ss)
Systemoutprintln(标准日期 + dfformat(new Date()))
//逐个输出相关字段值
Systemoutprint(年份 + cNowget(CalendarYEAR) + \t)
//月份有问题(这里的月份开始计数为)
Systemoutprint(月份 + cNowget(CalendarMONTH) + \t)
Systemoutprint(日期 + cNowget(CalendarDATE) + \t)
Systemoutprint(小时 + cNowget(CalendarHOUR) + \t)
Systemoutprint(分钟 + cNowget(CalendarMINUTE) + \t)
Systemoutprintln(秒钟 + cNowget(CalendarSECOND))
//本年的第几天在计算时间间隔的时候有用
Systemoutprintln(一年中的天数 + cNowget(CalendarDAY_OF_YEAR))
Systemoutprintln(一年中的周数 + cNowget(CalendarWEEK_OF_YEAR))
//即本月的第几周
Systemoutprintln(一月中的周数 + cNowget(CalendarWEEK_OF_MONTH))
//即一周中的第几天(这里是以周日为第一天的)
Systemoutprintln(一周中的天数 + cNowget(CalendarDAY_OF_WEEK))
}
/**
* 判定某个年份是否是闰年
*
* @param year待判定的年份
*
* @return 判定结果
* */
private static boolean isLeapYear(int year)
{
return (year% == || (year% == && year% != ))
}
/**
*
* 字符串去除两头空格如果为空则返回如果不空则返回该字符串去掉前后空格
*
* @param tStr输入字符串
*
* @return 如果为空则返回如果不空则返回该字符串去掉前后空格
*
*/
public static String cTrim(String tStr)
{
String ttStr = ;
if (tStr == null)
{}
else
{
ttStr = tStrtrim()
}
return ttStr;
}
/**
* 比较两个Date类型的日期大小
*
* @param sDate开始时间
*
* @param eDate结束时间
*
* @return result返回结果(相同 前者大 后者大)
* */
private static int compareDate(Date sDate Date eDate)
{
int result = ;
//将开始时间赋给日历实例
Calendar sC = CalendargetInstance()
sCsetTime(sDate)
//将结束时间赋给日历实例
Calendar eC = CalendargetInstance()
eCsetTime(eDate)
//比较
result = pareTo(eC)
//返回结果
return result;
}
}
程序执行结果如下