Java Calendar類(lèi)使用總結(jié)及使用實(shí)例
平時(shí)在瀏覽一些網(wǎng)站時(shí),有些網(wǎng)站會(huì)顯示出當(dāng)前時(shí)間,如現(xiàn)在是xx年xx月xx日 xx時(shí)xx分xx秒,在實(shí)際的開(kāi)發(fā)過(guò)程中,也會(huì)涉及到日期和時(shí)間的計(jì)算,Java中提供了一個(gè)專(zhuān)門(mén)的類(lèi)Calendar來(lái)處理日期與時(shí)間。
接下來(lái)就講解下Calendar類(lèi)的使用場(chǎng)景及使用方法。
1.獲取Calendar實(shí)例
首先,我們看下Calendar類(lèi)的定義
public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar>
因?yàn)楸欢x為abstract,所以我們無(wú)法通過(guò)new來(lái)創(chuàng)建Calendar類(lèi)的實(shí)例,不過(guò)Calendar類(lèi)提供了一個(gè)類(lèi)方法getInstance()來(lái)返回Calendar的實(shí)例。
public static Calendar getInstance()
{
return createCalendar(TimeZone.getDefault(), Locale.getDefault(Locale.Category.FORMAT));
}
由此,獲取Calendar實(shí)例的代碼如下所示:
Calendar calendar = Calendar.getInstance();
2.獲取當(dāng)前時(shí)間
package com.zwwhnly.springbootdemo;
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
// 月份的下標(biāo)是從0開(kāi)始的,即0~11分別代表1~12月,因此需要+1
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR_OF_DAY); // 24小時(shí)制
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
System.out.println("現(xiàn)在是:" + year + "年" + month + "月" + day + "日" + hour + "時(shí)" + minute + "分" + second + "秒");
}
}
運(yùn)行結(jié)果:
現(xiàn)在是:2019年2月21日15時(shí)36分38秒
注意:月份的下標(biāo)是從0開(kāi)始的,即0~11分別代表1~12月
3.設(shè)置時(shí)間
假設(shè)我們現(xiàn)在需要將時(shí)間設(shè)置為2019-02-21 23:59:59
3.1(一起設(shè)置):
Calendar calendar = Calendar.getInstance(); calendar.set(2019, Calendar.FEBRUARY, 21, 23, 59, 59); System.out.println(calendar.getTime());
3.2(分別設(shè)置):
Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, 2019); calendar.set(Calendar.MONTH, Calendar.FEBRUARY); calendar.set(Calendar.DAY_OF_MONTH, 21); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); System.out.println(calendar.getTime());
3.1和3.2的運(yùn)行結(jié)果都如下所示:
Thu Feb 21 23:59:59 CST 2019
4.時(shí)間計(jì)算
4.1增加秒
我們?cè)?.1的基礎(chǔ)上增加1秒,那么時(shí)間應(yīng)該是2019-02-22 00:00:00
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.set(2019, Calendar.FEBRUARY, 21, 23, 59, 59);
calendar.add(Calendar.SECOND, 1);
System.out.println(calendar.getTime());
}
運(yùn)行結(jié)果:
Fri Feb 22 00:00:00 CST 2019
4.2增加月
首先我們將時(shí)間設(shè)置為2019-01-31,然后先增加1個(gè)月,再增加2個(gè)月
Calendar calendar = Calendar.getInstance(); calendar.set(2019, Calendar.JANUARY, 31); System.out.println(calendar.getTime()); calendar.add(Calendar.MONTH, 1); System.out.println(calendar.getTime()); calendar.add(Calendar.MONTH, 2); System.out.println(calendar.getTime());
運(yùn)行結(jié)果:
Thu Jan 31 15:58:03 CST 2019
Thu Feb 28 15:58:03 CST 2019
Sun Apr 28 15:58:03 CST 2019
注意事項(xiàng):當(dāng)所在的月份沒(méi)有那個(gè)日期時(shí),如2月份沒(méi)有31號(hào),返回的是所在月的最后一天(2月28號(hào))
5.擴(kuò)展:獲取某月的第一天和最后一天
package com.zwwhnly.springbootdemo;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class CalendarDemo {
public static void main(String[] args) {
System.out.println(getFirstDayOfMonth(2019, 2));
System.out.println(getLastDayOfMonth(2019, 2));
System.out.println(getFirstDayOfMonth(2019, 3));
System.out.println(getLastDayOfMonth(2019, 3));
}
public static String getLastDayOfMonth(int year, int month) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month - 1);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DATE));
return new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime());
}
public static String getFirstDayOfMonth(int year, int month) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month - 1);
calendar.set(Calendar.DAY_OF_MONTH, calendar.getMinimum(Calendar.DATE));
return new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime());
}
}
運(yùn)行結(jié)果:
2019-02-01
2019-02-28
2019-03-01
2019-03-31
6.參考鏈接
Java中Calendar類(lèi)的常用方法
Java Calendar類(lèi)的使用總結(jié)
java時(shí)間類(lèi)Date、Calendar及用法
以上所述是小編給大家介紹的Java Calendar類(lèi)使用總結(jié)及使用實(shí)例詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
探討Java中最常見(jiàn)的十道面試題(超經(jīng)典)
本篇文章是對(duì)Java中最常見(jiàn)的十道面試題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-07-07
Spring之什么是ObjectFactory?什么是ObjectProvider?
這篇文章主要介紹了Spring之什么是ObjectFactory?什么是ObjectProvider?具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
Quarkus云原生開(kāi)篇java框架簡(jiǎn)介
Quarkus?是小紅帽開(kāi)源的專(zhuān)門(mén)針對(duì)云容器環(huán)境優(yōu)化的云原生java框架,博主接下來(lái)的項(xiàng)目估計(jì)都會(huì)使用這個(gè)框架來(lái)開(kāi)發(fā),相關(guān)的問(wèn)題都會(huì)記錄在這個(gè)系列,本文是個(gè)開(kāi)篇2022-02-02
Java遞歸基礎(chǔ)與遞歸的宏觀語(yǔ)意實(shí)例分析
這篇文章主要介紹了Java遞歸基礎(chǔ)與遞歸的宏觀語(yǔ)意,結(jié)合實(shí)例形式分析了java遞歸的相關(guān)原理、操作技巧與注意事項(xiàng),需要的朋友可以參考下2020-03-03
Spring Boot動(dòng)態(tài)加載Jar包與動(dòng)態(tài)配置實(shí)現(xiàn)
隨著項(xiàng)目的不斷演進(jìn)和業(yè)務(wù)需求的增長(zhǎng),很多場(chǎng)景下需要實(shí)現(xiàn)系統(tǒng)的動(dòng)態(tài)性和靈活性,本文主要介紹了Spring Boot動(dòng)態(tài)加載Jar包與動(dòng)態(tài)配置實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02
maven打包成第三方j(luò)ar包且把pom依賴包打入進(jìn)來(lái)的方法
這篇文章主要介紹了maven打包成第三方j(luò)ar包且把pom依賴包打入進(jìn)來(lái)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
SpringBoot上傳文件到本服務(wù)器 目錄與jar包同級(jí)問(wèn)題
這篇文章主要介紹了SpringBoot上傳文件到本服務(wù)器 目錄與jar包同級(jí)問(wèn)題,需要的朋友可以參考下2018-11-11

