關於Calendar日曆類與Date類的總結
Calendar類
一.獲得該類對象
Calendar calendar = Calendar.getInstance();
//獲取當前時間
二.設置日期
calendar .set(int year,int month,int date,int hour,int minute,int second)
//對應設置年月日…
calendar .setTime(Date date);
//將Date對象轉換爲Calendar對象
calendar.setWeekDate(int weekYear, int weekOfYear, int dayOfWeek);
//設置年份、在當年的週數、
三.返回日期
int get(int field);
//返回給定日曆字段的值
Date date = c.getTime();
//返回一個表示此 Calendar 時間值的 Date 對象
//獲得年份
int year = c.get(Calendar.YEAR);
// 獲得月份
int month = c.get(Calendar.MONTH) + 1;
// 獲得日期
int date = c.get(Calendar.DATE);
// 獲得小時
int hour = c.get(Calendar.HOUR_OF_DAY);
// 獲得分鐘
int minute = c.get(Calendar.MINUTE);
// 獲得秒
int second = c.get(Calendar.SECOND);
// 獲得星期幾:1代表星期日、2代表星期1、3代表星期二,以此類推
int day = c.get(Calendar.DAY_OF_WEEK);
//獲得當日在當年的第幾周
int week = c.get(Calendar.WEEK_OF_YEAR);
四.修改日期
c.add(int field,int amont); //爲給定的日曆字段添加或減去指定的時間量
//Calendar.YEAR 年份
//Calendar.MONTH 月份
//Calendar.DATE 日期
//Calendar.HOUR_OF_DAY 24小時制的小時
//Calendar.MINUTE 分鐘
//Calendar.SECOND 秒
//Calendar.DAY_OF_WEEK 星期幾
五.日期格式轉換
Date日期對象格式化
使用SimpleDateFormat
對象對Date日期格式化
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.format(calendar.getTime());
把日期轉換爲特定的時間,比如前端傳過來的日期參數是2020-01-15這種形式的,如果想要變爲某一具體時間戳:
startTime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")
.parse(new SimpleDateFormat("yyyy-MM-dd 00:00:00")
.format(startTime));
六.常用方法
判斷是否是閏年
GregorianCalendar calendar = new GregorianCalendar();
calendar.isLeapYear(2020); //若是閏年,返回true,否則false
日期對象的比較
1、對兩個Date對象使用getTime()方法,獲取從1970.1.1到至今的毫秒數,進行比較
2、使用before( ),after( )以及equals( )方法:
calendar1.before(calendar2)
//若calendar1早於calendar2,返回true,否則false
calendar1.after(calendar2)
//若calendar1晚於calendar2,返回true,否則false
calendar1.equals(calendar2)
//若calendar1和calendar2日期相等,返回true,否則false
3、使用compareTo方法:
calendar1.compareTo(calendar2)
若 calendar1 小於 calendar2,返回-1
若 calendar1 等於 calendar2,返回0
若 calendar1 大於 calendar2,返回1
獲取本週一和本週日的時間戳
本週一00:00:00:
Calendar thisMondayCalendar = Calendar.getInstance();
thisMondayCalendar.setFirstDayOfWeek(Calendar.MONDAY);
thisMondayCalendar.setTime(new Date());
int day_of_week = thisSundayCalendar.get(thisSundayCalendar.DAY_OF_WEEK) - 1;
if (day_of_week == 0)
day_of_week = 7;
thisMondayCalendar.add(Calendar.DATE, -day_of_week + 1);
SimpleDateFormat mondaysdf = new SimpleDateFormat("YYYY-MM-dd 00:00:00");
System.out.println(mondaysdf.format(thisMondayCalendar.getTime()));
本週日23:59:59:
Calendar thisSundayCalendar = Calendar.getInstance();
thisSundayCalendar.setFirstDayOfWeek(Calendar.MONDAY);
thisSundayCalendar.setTime(new Date());
int day_of_week = thisSundayCalendar.get(thisSundayCalendar.DAY_OF_WEEK) - 1;
if (day_of_week == 0)
day_of_week = 7;
thisSundayCalendar.add(Calendar.DATE, -day_of_week + 7);
SimpleDateFormat sundaysdf = new SimpleDateFormat("YYYY-MM-dd 23:59:59");
System.out.println(sundaysdf.format(thisSundayCalendar.getTime()));
獲取本月第一天00:00:00
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH, 1);
SimpleDateFormat firstsdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00");
Date firstDayInMonth = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(firstsdf.format(calendar.getTime()));
獲取本月最後一天23:59:59
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
SimpleDateFormat lastsdf = new SimpleDateFormat("yyyy-MM-dd 23:59:59");
Date lastDayInMonth = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(lastsdf.format(calendar.getTime()));
七.需要注意的坑
因爲國際上以週日作爲一週的開始,按照中國習慣是一週一作爲一週的開始,所以需要設置:
calendar.setFirstDayOfWeek(Calendar.MONDAY);
//設置週一爲一週的第一天
setFirstDayOfWeek方法只對 WEEK_OF_MONTH
和 WEEK_OF_YEAR
有作用,但是不會改變Calendar.DAY_OF_WEEK
的值,因爲DAY_OF_WEEK
是以一個常量的形式存在的,如果是週一,永遠返回的都是2。
WEEK_OF_MONTH:
當前Calendar日期對象是當前月的第幾周。
WEEK_OF_YEAR:
當前Calendar日期對象是當前年的第幾周。