關於Calendar日曆類與Date類的總結

關於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_MONTHWEEK_OF_YEAR 有作用,但是不會改變Calendar.DAY_OF_WEEK的值,因爲DAY_OF_WEEK是以一個常量的形式存在的,如果是週一,永遠返回的都是2。
WEEK_OF_MONTH:當前Calendar日期對象是當前月的第幾周。
WEEK_OF_YEAR:當前Calendar日期對象是當前年的第幾周。

發佈了6 篇原創文章 · 獲贊 1 · 訪問量 1644
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章