在之前的文章我們介紹了一下 Java 中的包裝類,本章我們來看一下 Java 中的日期操作。

          在我們?nèi)粘>幊讨校掌谑刮覀兎浅3S玫囊粋€操作,比如讀寫日期,輸出日志等,那接下來我們就看一下 Java 中的日期操作。



          ?從上圖可以看出 Java 為我們提供了三個標準類庫來工我們使用,三個類庫之間在使用過程中又需要相互協(xié)作,接下來我們就一一看一下。

          Java中的時間

            1、Java 中的時間使用標準類庫的 Date 類表示,是用距離一個固定時間點的毫秒數(shù)(可正可負,long 類型)表示一個特定的時間點;

            2、固定的時間點叫紀元(epoch),是 UTC 時間 1970年1月1日 00:00:00;

            3、UTC(Universal Time Coordinated 世界調(diào)整時間)與GMT(Greenwich Mean Time
          格林威治時間)一樣,是一種具有實際目的的科學標準時間。
          1 import java.util.Date; 2 3 /** 4 * java.util.Date 包 5 * Date
          的每一個實例用于表示一個確切的時間點。 6 * 內(nèi)部維護了一個 long 值,該值記錄的是從: 7 * 1970年1月1日 00:00:00
          到表示的時間點之間所經(jīng)歷的毫秒值。 8 * 正數(shù)是 70 年以后的日期,負數(shù)是 70 年以前的日期 9 * 由于 Date
          設計上存在缺陷(時區(qū),千年蟲),所以它的大部分方法被設置為"過時的",10 * 不再建議使用 11 */ 12 public class Main { 13
          public static void main(String[] args) { 14 // 當前系統(tǒng)時間 15 Date now = new Date();
          16 System.out.println(now); // Wed Dec 11 15:57:21 CST 2019 --對非英語地區(qū)很不友好 17 18
          /** 19 * Date 的大部分方法不建議使用了 20 * */ 21 now.getYear(); // getYear
          上面油條橫線,表示方法已不再建議使用 22 /** 23 * 獲取 Date 內(nèi)部維護的 long 還可以使用 24 * */ 25 long time =
          now.getTime();26 System.out.println(time); // 1576053403721 27 /** 28 * void
          setTime(long)29 * 設置一個 long 值,使 Date 表示該 long 值所表示的時間 30 * */ 31 time += 24 *
          60 * 60 * 1000;// 將 time 加 1 天的毫秒,即明天 32 now.setTime(time); // setTime()
          可以將時間設置為我們規(guī)定的時間 33 System.out.println(now); // Thu Dec 12 16:39:54 CST 2019 34
          35 } 36 }
          在上面的代碼中,我們講解了一些關于 Date 的一些內(nèi)容,可以看出 Date 已經(jīng)不是很實用現(xiàn)在的編程,我們充其量也只是用一下 getTime
          這個方法。下面我們來看一下 SimpleDateFormat

          SimpleDateFormat 可以根據(jù)一個給定的日期格式將 String 和 Date 想換轉(zhuǎn)換,格式如下:



          現(xiàn)在我們就根據(jù)上面的轉(zhuǎn)換格式輸出一下當前時間,代碼如下:
          1 import java.text.ParseException; 2 import java.text.SimpleDateFormat; 3
          import java.util.Date; 4 5 /** 6 * java.util.SimpleDateFormat 包 7 *
          根據(jù)一個給定的日期格式將 String 與 Date 相互轉(zhuǎn)換 8 */ 9 public class Main { 10 public static
          void main(String[] args) throws ParseException { 11 // 當前系統(tǒng)時間 12 Date now = new
          Date();13 System.out.println(now); // Wed Dec 11 16:50:42 CST 2019 14 15
          SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 16 17 /** 18
          * 將 String 轉(zhuǎn)為 Date19 * String format(Date date) 20 * format 方法可以將給定的 date
          對象所表示的時間21 * 按照 SimpleDateFormat 制定的日期格式轉(zhuǎn)換為字符串 22 */ 23 String str =
          sdf.format(now);24 System.out.println(str); // 2019-12-12 11:10:53 25 26 /** 27
          * 將 Date 轉(zhuǎn)為 String28 * Date parse(String str) 29 * parse 方法可以將給定的 str 按照
          SimpleDateFormat 制定的30 * 日期格式解析為一個 Date 對象 31 */ 32 Date date = sdf.parse(str);
          33 System.out.println(date); // Thu Dec 12 11:47:09 CST 2019 34 } 35 }
          在上面的代碼中,我們實現(xiàn)了 Date 與 String 之間的互轉(zhuǎn),需要注意的是在使用 parse
          方法時需要先拋出異常,這個我們在之后的內(nèi)容中會詳細講解異常的處理。

          接下來我們再來看一下時間操作中的 Calender,



          ?
          1 import java.util.Calendar; 2 import java.util.Date; 3 4 /** 5 *
          java.util.Calender 包 6 * 日歷類 7 * 該類事一個抽象類,封裝了對時間的相關操作 8 * 常用的實現(xiàn)類格力高里歷(陽歷)
          9 * 使用日歷類是為了對時間進行相關的操作 10 * 比如計算時間 11 */ 12 public class Main { 13 public
          static void main(String[] args) { 14 /** 15 * 使用 Calender 的靜態(tài)方法創(chuàng)建實例, 16 *
          該方法會根據(jù)當前系統(tǒng)所在時區(qū)創(chuàng)建一個相應的實現(xiàn)17 * 通常是 GregorianCalender 18 * 默認創(chuàng)建的日歷實例表示當前系統(tǒng)時間 19 *
          */ 20 Calendar calendar = Calendar.getInstance(); 21 // toString 不能直觀反映表示的日期 22
          System.out.println(calendar);//
          java.util.GregorianCalendar[time=1576134924891,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2019,MONTH=11,WEEK_OF_YEAR=50,WEEK_OF_MONTH=2,DAY_OF_MONTH=12,DAY_OF_YEAR=346,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=3,HOUR_OF_DAY=15,MINUTE=15,SECOND=24,MILLISECOND=891,ZONE_OFFSET=28800000,DST_OFFSET=0]
          23 24 /** 25 * Calender 與 Date 之間的互轉(zhuǎn) 26 * Calender -> Date 27 * Date
          getTime()28 * Calender 提供了方法 getTime() 29 * 該方法返回一個 Date 對象,該對象表示的時間就是 30 *
          當前 Calender 表示的時間31 */ 32 Date date = calendar.getTime(); 33
          System.out.println(date);// Thu Dec 12 15:18:56 CST 2019 34 35 /** 36 * Date
          -> Calender37 * Void setTime(Date date) 38 * Calender 的 setTime 方法可以使當前 39 *
          Calender 表示給定的 Date 所表示的時間40 */ 41 calendar.setTime(date); 42 } 43 }
          當然 Calender 提供了針對不同時間分量單獨設置的值,如下:
          1 import java.util.Calendar; 2 3 /** 4 * Calender 提供了針對不同時間分量單獨設置值的方法 5
          * void set(int filed, int value) 6 * 其中第一個參數(shù)為:時間分量,例如:年,月,日等等 7 * 第二個參數(shù)為對應的值
          8 * 時間分量是一個 int 值,使用 Calender 提供的常量 9 */ 10 public class Main { 11 public
          static void main(String[] args) { 12 Calendar calendar = Calendar.getInstance();
          13 System.out.println(calendar.getTime()); // Thu Dec 12 16:33:06 CST 2019 14 15
          // 設置 Calender,使其表示 2008-08-08 20:08:08 16 // 設定年 17
          calendar.set(Calendar.YEAR, 2008); 18 System.out.println(calendar.getTime()); //
          Fri Dec 12 16:33:06 CST 200819 20 // 設置月 21 calendar.set(Calendar.MONTH, 7); //
          月是從 0 開始的 22 calendar.set(Calendar.MONTH, Calendar.AUGUST); // 也可以使用常量表示月 23
          System.out.println(calendar.getTime());// Tue Aug 12 16:50:43 CST 2008 24 25 /**
          26 * 設置日 27 * 對應的時間分量常用的 28 * DATE:月中天 29 * DAY_OF_MONTH:月中的天,與DATE一致 30 *
          DAY_OF_WEEK:周中的天,星期幾31 * DAY_OF_YEAR:年中的天 32 * */ 33
          calendar.set(Calendar.DATE, 8); 34 System.out.println(calendar.getTime()); //
          Fri Aug 08 17:01:48 CST 200835 36 // 設置小時 37 calendar.set(Calendar.HOUR, 8); 38
          System.out.println(calendar.getTime());// Fri Aug 08 08:35:45 CST 2008 39 40 //
          設置分 41 calendar.set(Calendar.MINUTE, 8); 42
          System.out.println(calendar.getTime());// Fri Aug 08 08:08:45 CST 2008 43 44 //
          設置秒 45 calendar.set(Calendar.SECOND, 8); 46
          System.out.println(calendar.getTime());// Fri Aug 08 08:08:08 CST 2008 47 } 48
          }
          在上面的代碼中,我們可以根據(jù) set 方法來設定任意我們想要的時間分量。

          當然,我們既可以單獨設置時間分量,也可以單獨獲取時間分量,如下:
          1 import java.util.Calendar; 2 3 /** 4 * 獲取一個 Calender 表示的日期中 5 *
          各個時間分量對應的值 6 * int get(int filed) 7 * 獲取對應時間分量的值 8 */ 9 public class Main {
          10 public static void main(String[] args) { 11 Calendar calendar =
          Calendar.getInstance();12 13 // 獲取年 14 int year = calendar.get(Calendar.YEAR);
          15 System.out.println(year); // 2019 16 17 // 獲取月 18 int month =
          calendar.get(Calendar.MONTH) + 1;// 月是從 0 開始 19 System.out.println(month); // 12
          20 21 // 獲取周 22 int week = calendar.get(Calendar.DAY_OF_WEEK) - 1; // 周是從周日開始的
          23 System.out.println(week == 0 ? 7 : week); // 5 24 String[] data =
          {"日","一","二","三","四","五","六"}; 25 System.out.println(data[week]); // 五 26 27 //
          獲取日 28 int date = calendar.get(Calendar.DATE); 29 System.out.println(date); //
          13 30 } 31 }
          接下來我們再來看一下 Calender 中的時間計算:
          1 import java.util.Calendar; 2 3 /** 4 * Calender 中計算時間的方法 5 * void
          add(int field, int value) 6 * 對指定的時間分量加上給定的值,若給定的值是負數(shù) 7 * 則是減去給定的值 8 */ 9
          public class Main { 10 public static void main(String[] args) { 11 Calendar
          calendar = Calendar.getInstance(); 12 // 查看3年2月1天后的日期 13 14 // 查看 3 年后 15
          calendar.add(Calendar.YEAR, 3); 16 System.out.println(calendar.getTime()); //
          Tue Dec 13 10:59:29 CST 202217 18 // 查看 2 月后 19 calendar.add(Calendar.MONTH, 2);
          20 System.out.println(calendar.getTime()); // Mon Feb 13 10:59:29 CST 2023 21 22
          // 查看 1 天后 23 calendar.add(Calendar.DAY_OF_YEAR, 1); 24
          System.out.println(calendar.getTime());// Tue Feb 14 10:59:29 CST 2023 25 } 26
          }

          友情鏈接
          ioDraw流程圖
          API參考文檔
          OK工具箱
          云服務器優(yōu)惠
          阿里云優(yōu)惠券
          騰訊云優(yōu)惠券
          京東云優(yōu)惠券
          站點信息
          問題反饋
          郵箱:[email protected]
          QQ群:637538335
          關注微信

                大香蕉伊人网站 | 一级黄色操逼大片 | 免费视频毛片 | 外国黄色一级片 | 正在播放丰满老熟女 |