湖南省建設(shè)安監(jiān)局官網(wǎng)站朋友圈推廣文案
Java Calendar 是時(shí)間操作類(lèi),Calendar 抽象類(lèi)定義了足夠的方法,在某一特定的瞬間或日歷上,提供年、月、日、小時(shí)之間的轉(zhuǎn)換提供方法
一、獲取具體時(shí)間信息
1. 當(dāng)前時(shí)間
獲取此刻時(shí)間的年月日時(shí)分秒
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + day + "日");
//輸出時(shí)間2023年2月28日
2. 指定時(shí)間
使用自定義時(shí)間或者某個(gè)請(qǐng)求中的時(shí)間
a)使用date類(lèi)
//查看源碼可以發(fā)現(xiàn),year= year + 1900,month = month + 1
Date date = new Date(123, 1, 28,14,28,0);
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + day + "日");
//輸出時(shí)間2023年2月28日
b)使用calendar類(lèi)
Calendar calendar = Calendar.getInstance();
calendar.set(2023,2,28,14,36,0);
int year = calendar.get(Calendar.YEAR);
//這里指定了月份,所以不需要+1
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + day + "日");
//輸出時(shí)間2023年2月28日
二、指定偏移量時(shí)間
可以指定出任意一段時(shí)間
//當(dāng)前時(shí)間2023-2-28
Calendar calendar = Calendar.getInstance();
//3年前
calendar.add(Calendar.YEAR, -3);
//2月后
calendar.add(Calendar.MONTH, +2);
//7天后(默認(rèn)每個(gè)月30天)
calendar.add(Calendar.DAY_OF_YEAR, 7);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DATE);
System.out.println(year + "年" + month + "月" + day + "日");
//輸出時(shí)間2020年4月5日
三、時(shí)區(qū)使用
可以設(shè)置時(shí)區(qū)
Calendar calendar = Calendar.getInstance();
//表示東一區(qū)
TimeZone timeZone = TimeZone.getTimeZone("GMT+1");
calendar.setTimeZone(timeZone);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DATE);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
System.out.println(year + "年" + month + "月" + day + "日" + hour + "時(shí)");
//輸出時(shí)間2023年2月28日7時(shí)(當(dāng)前時(shí)間2023年2月28日14時(shí))//表示西一區(qū)
TimeZone timeZone = TimeZone.getTimeZone("GMT-1");
//輸出時(shí)間2023年2月28日5時(shí)(當(dāng)前時(shí)間2023年2月28日14時(shí))//互聯(lián)網(wǎng)時(shí)間
TimeZone timeZone = TimeZone.getTimeZone("GMT");
//輸出時(shí)間2023年2月28日6時(shí)(當(dāng)前時(shí)間2023年2月28日14時(shí))
四、Calendar類(lèi)中的靜態(tài)常量
常量 | 描述 |
---|---|
Calendar.YEAR | 年份 |
Calendar.MONTH | 月份 |
Calendar.DATE | 當(dāng)前時(shí)間為多少號(hào)(日歷式的多少號(hào)) |
Calendar.HOUR | 小時(shí)(12小時(shí)制) |
Calendar.HOUR_OF_DAY | 小時(shí)(24小時(shí)制) |
Calendar.MINUTE | 分鐘數(shù) |
Calendar.SECOND | 秒數(shù) |
Calendar.MILLENSECOND | 毫秒數(shù) |
Calendar.WEEK_OF_MONTH | 當(dāng)前時(shí)間是所在月的第幾個(gè)星期(日歷式的第幾周) |
Calendar.WEEK_OF_YEAR | 當(dāng)前時(shí)間是所在當(dāng)前年的第幾個(gè)星期 |
Calendar.DAY_OF_WEEK_IN_MONTH | 當(dāng)前時(shí)間是所在月的第幾個(gè)星期,以月份天數(shù)為標(biāo)準(zhǔn),一個(gè)月的1號(hào)為第一周,8號(hào)為第二周 |
Calendar.DAY_OF_WEEK | 一周七天中,當(dāng)前時(shí)間是一周中的第幾天(星期天為第一天) |
Calendar.DAY_OF_YEAR | 一年中的第幾天 |
Calendar.DAY_OF_MONTH | 一個(gè)月中的第幾天,結(jié)果等同于Calendar.DATE |
Calendar.AM_PM | 上午還是下午(0表示上午,1表示下午) |
五、Calendar類(lèi)中的常用方法
方法 | 描述 |
---|---|
Calendar getInstance | 獲得一個(gè)日歷對(duì)象(重要) |
Date getTime | 返回當(dāng)前時(shí)間 |
long getTimeInMillis | 返回當(dāng)前時(shí)間毫秒值 |
void setTimeInMillis(long millis) | 用毫秒值設(shè)置Calendar的時(shí)間 |
int get(int field) | 獲得給定時(shí)間域的值(如:Calendar.DATE) |
void set(int field, int value) | 用給定的值設(shè)置時(shí)間域 |
void clear() | 清除所有的時(shí)間域 |
void clear(int field) | 清除指定時(shí)間域的值 |
set(int year, int month,int date,int hour,int minute,int second) | 設(shè)置年、月、日、時(shí)、分、秒域的數(shù)值 |
void complete() | 填充時(shí)間域列表中所有未設(shè)置的域 |
boolean equals(Object obj) | 比較該日歷和指定的對(duì)象 |
boolean before(Object when) | 比較時(shí)間域大小 |
boolean after(Object when) | 比較時(shí)間域大小 |
void add(int field,int amount) | 將指定 ( 帶符號(hào)的 ) 數(shù)量的時(shí)間添加到給定的時(shí)間域 |
void roll(int field,boolean up) | 在給定的時(shí)間域上 ( 向上true / 向下false ) 滾動(dòng)一個(gè)時(shí)間單元 |
void setTimeZone(TimeZone value) | 用給定的時(shí)區(qū)值設(shè)置時(shí)區(qū) |
TimeZone getTimeZone() | 獲得當(dāng)前時(shí)區(qū) |
void setMinimalDaysInFirstWeek(int value) | 設(shè)置該年中第一個(gè)星期所需要的最少的天數(shù)。例如,如果定義第一個(gè)星期包含一年第一個(gè)月的第一天,用值 1 調(diào)用該方法。如果它必須是一個(gè)完整的星期,使用 7 調(diào)用該方法 |
int getMinimalDaysInFirstWeek() | 原理同上 |
int getMinimum(int field) | 獲得給定時(shí)間域最小值,如對(duì)于DAY_OF_MONTH最小值為1(1號(hào)) |
int getMaximum(int field) | 獲得給定時(shí)間域最大值,如對(duì)于DAY_OF_MONTH最小值為31(31號(hào)) |
String toString() | 返回日歷的字符串表示 |
六、Calendar轉(zhuǎn)化為Date
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(dateFormat.format(date));
注意項(xiàng):\color{red}{注意項(xiàng):}注意項(xiàng):
month 是從0開(kāi)始的,也就是全年月份是0 ~ 11;
DAY_OF_WEEK 是從星期天開(kāi)始的,也就是星期一是2,星期二是3。。。