平時在瀏覽一些網(wǎng)站時,有些網(wǎng)站會顯示出當前時間,如現(xiàn)在是xx年xx月xx日 xx時xx分xx秒,在實際的開發(fā)過程中,也會涉及到日期和時間的計算,Java中提供了一個專門的類Calendar來處理日期與時間。
接下來就講解下Calendar類的使用場景及使用方法。
成都網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)公司、微信開發(fā)、微信小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。核心團隊均擁有互聯(lián)網(wǎng)行業(yè)多年經(jīng)驗,服務(wù)眾多知名企業(yè)客戶;涵蓋的客戶類型包括:成都加固等眾多領(lǐng)域,積累了大量豐富的經(jīng)驗,同時也獲得了客戶的一致稱贊!
1.獲取Calendar實例
首先,我們看下Calendar類的定義
public abstract class Calendar implements Serializable, Cloneable, Comparable
因為被定義為abstract,所以我們無法通過new來創(chuàng)建Calendar類的實例,不過Calendar類提供了一個類方法getInstance()來返回Calendar的實例。
public static Calendar getInstance() { return createCalendar(TimeZone.getDefault(), Locale.getDefault(Locale.Category.FORMAT)); }
由此,獲取Calendar實例的代碼如下所示:
Calendar calendar = Calendar.getInstance();
2.獲取當前時間
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); // 月份的下標是從0開始的,即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小時制 int minute = calendar.get(Calendar.MINUTE); int second = calendar.get(Calendar.SECOND); System.out.println("現(xiàn)在是:" + year + "年" + month + "月" + day + "日" + hour + "時" + minute + "分" + second + "秒"); } }
運行結(jié)果:
現(xiàn)在是:2019年2月21日15時36分38秒
注意:月份的下標是從0開始的,即0~11分別代表1~12月
3.設(shè)置時間
假設(shè)我們現(xiàn)在需要將時間設(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的運行結(jié)果都如下所示:
Thu Feb 21 23:59:59 CST 2019
4.時間計算
4.1增加秒
我們在3.1的基礎(chǔ)上增加1秒,那么時間應(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()); }
運行結(jié)果:
Fri Feb 22 00:00:00 CST 2019
4.2增加月
首先我們將時間設(shè)置為2019-01-31,然后先增加1個月,再增加2個月
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());
運行結(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
注意事項:當所在的月份沒有那個日期時,如2月份沒有31號,返回的是所在月的最后一天(2月28號)
5.擴展:獲取某月的第一天和最后一天
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()); } }
運行結(jié)果:
2019-02-01
2019-02-28
2019-03-01
2019-03-31
6.參考鏈接
Java中Calendar類的常用方法
Java Calendar類的使用總結(jié)
java時間類Date、Calendar及用法
以上所述是小編給大家介紹的Java Calendar類使用總結(jié)及使用實例詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對創(chuàng)新互聯(lián)網(wǎng)站的支持!