笔记六:课程实验中遇到的问题与解决(3)
一、Java中关于日期操作的一些总结
在实现三中为了实现课表安排与值班安排,需要使用到很多不同的对日期的操作,现将这些操作总结如下
1. 字符串转日期或日期转字符串
/**
SimpleDateFormat函数语法:
G 年代标志符
y 年
M 月
d 日
h 时 在上午或下午 (1~12)
H 时 在一天中 (0~23)
m 分
s 秒
S 毫秒
E 星期
D 一年中的第几天
F 一月中第几个星期几
w 一年中第几个星期
W 一月中第几个星期
a 上午 / 下午 标记符
k 时 在一天中 (1~24)
K 时 在上午或下午 (0~11)
z 时区
*/
// 创建SimpleDateFormat对象实例并定义好转换格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("把当前时间转换成字符串:" + sdf.format(new Date()));
// 格式需要与上面一致,不然会出现异常
Date date = sdf.parse("2005-12-15 15:30:23");
System.out.println("字符串转换成时间:" + date);
2. 日期加一年、一月、一周、一日
Date date = new Date();
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.add(Calendar.YEAR, 1);
// 把日期往后增加一年,负数减一年
calendar.add(Calendar.MONTH, 1);
// 把日期往后增加一个月,负数减一个月
calendar.add(Calendar.WEEK_OF_MONTH, 1);
// 把日期往后增加一周,负数减一周
calendar.add(Calendar.DAY_OF_MONTH, 1);
// 把日期往后增加一天,负数减一天
3. 获取某个日期是星期几
Calendar now = Calendar.getInstance();
//一周第一天是否为星期天
boolean isFirstSunday = (now.getFirstDayOfWeek() == Calendar.SUNDAY);
//获取周几
int weekDay = now.get(Calendar.DAY_OF_WEEK);
//若一周第一天为星期天,则-1
if(isFirstSunday){
weekDay = weekDay - 1;
}
if(weekDay == 0){
weekDay = 7;
}
//打印周几
System.out.println(weekDay);
4. 计算指定日期加上指定天数后的日期
Date endTime = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sdf.sdf(endTime));
Calendar calendar = Calendar.getInstance();
calendar.setTime(endTime);
calendar.add(Calendar.DATE,10);
System.out.println(sdf.sdf(calendar.getTime()));
5. 计算两个日期的天数差
/**
* date2比date1多的天数
*
* @param date1 date1
* @param date2 date2
* @return 天数差
*/
public static int calcDayOffset(Date date1, Date date2) {
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
int day1 = cal1.get(Calendar.DAY_OF_YEAR);
int day2 = cal2.get(Calendar.DAY_OF_YEAR);
int year1 = cal1.get(Calendar.YEAR);
int year2 = cal2.get(Calendar.YEAR);
if (year1 != year2) { //同一年
int timeDistance = 0;
for (int i = year1; i < year2; i++) {
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) { //闰年
timeDistance += 366;
} else { //不是闰年
timeDistance += 365;
}
}
return timeDistance + (day2 - day1);
} else { //不同年
return day2 - day1;
}
}