Java中罕見的日期操作(取值、轉換、加減、比擬)。本站提示廣大學習愛好者:(Java中罕見的日期操作(取值、轉換、加減、比擬))文章只能為提供參考,不一定能成為您想要的結果。以下是Java中罕見的日期操作(取值、轉換、加減、比擬)正文
Java 的開辟進程中免不了與 Date 類型糾纏,預備總結一下項目常常應用的日期相干操作,JDK 版本 1.7,假如可以或許贊助年夜家勤儉那末幾分鐘起身運動一下,去泡杯咖啡,便是極好的,嘿嘿。固然,我只供給了可行的處理計劃,其實不包管是最好理論,迎接評論辯論。
1. 日期取值
在舊版本 JDK 的時期,有很多代碼中日期取值應用了 java.util.Date 類,然則因為 Date 類未便於完成國際化,其實從 JDK1.1 開端,就更推舉應用 java.util.Calendar 類停止時光和日期方面的處置。這裡便不引見 Date 類的操作,讓我們直奔主題吧,若何應用 Calendar 類獲得如今的日期時光。
因為 Calendar 的結構器辦法被 protected 潤飾,所以我們會經由過程 API 中供給的 getInstance 辦法來創立 Calendar 對象。
//有多個重載辦法創立 Calendar 對象 Calendar now = Calendar.getInstance(); //默許 //指准時區和地域,也能夠只輸出個中一個參數 Calendar now = Calendar.getInstance(timeZone, locale);
然後我們便可以經由過程該對象獲得以後的各類時光參數了。
int year = now.get(Calendar.YEAR); //,以後年份 int month = now.get(Calendar.MONTH) + ; //,以後月,留意加 int day = now.get(Calendar.DATE); //,以後日Date date = now.getTime(); //直接獲得一個 Date 類型的日期
要獲得其他類型的時光數據僅需修正 now.get() 內的參數,除以上三種參數,其他經常使用參數以下:
•Calendar.DAY_OF_MONTH:日期,和 Calendar.DATE 雷同
•Calendar.HOUR:12 小時制的小時數
•Calendar.HOUR_OF_DAY:24小時制的小時數
•Calendar.MINUTE:分鐘
•Calendar.SECOND:秒
•Calendar.DAY_OF_WEEK:周幾
除獲得時光數據,我們也能夠經由過程 Calendar 對象設置各類時光參數。
//只設定某個字段的值 // public final void set(int field, int value) now.set(Calendar.YEAR, ); //設定年代日或許年代日時分或年代日時分秒 // public final void set(int year, int month, int date[, int hourOfDay, int minute, int second]) now.set(, , [, , , ]); //直接傳入一個 Date 類型的日期 // public final void setTime(Date date) now.set(date);
留意:
•當設置了時光參數後,其他相干的數值都邑從新盤算,例如當你把日期設為 11 號後,周幾就會尴尬刁難應變更。
•取得的月份加 1 才是現實月份。
•在 Calendar 類中,周日是 1,周一是 2,以此類推。
2. 日期轉換
聊完日期取值,接上去聊聊日期轉換,轉換普通是 Date 型日期與 String 型字符串之間的互相轉換,我重要應用 java.text.SimpleDateFormat 停止轉換操作。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { //日期轉字符串 Calendar calendar = Calendar.getInstance(); Date date = calendar.getTime(); String dateStringParse = sdf.format(date); //字符串轉日期 String dateString = "-- ::"; Date dateParse = sdf.parse(dateString); } catch (ParseException e) { e.printStackTrace(); }
留意:
•創立 SimpleDateFormat 對象時必需指定轉換格局。
•轉換格局辨別年夜小寫,yyyy 代表年份,MM 代表月份,dd 代表日期,HH 代表 24 進制的小時,hh 代表 12 進制的小時,mm 代表分鐘,ss 代表秒。
3. 日期加減
平日來講,我們會對日期做兩種加減操作:
•以某個日期為基准,盤算其幾天前/後、幾年前/後,或許其他時光單元前後的日期
//依據如今時光盤算 Calendar now = Calendar.getInstance(); now.add(Calendar.YEAR, ); //如今時光的年後 now.add(Calendar.YEAR, -); //如今時光的年前 //依據某個特定的時光 date (Date 型) 盤算 Calendar specialDate = Calendar.getInstance(); specialDate.setTime(date); //留意在此處將 specialDate 的值改成特定日期 specialDate.add(Calendar.YEAR, ); //特准時間的年後 specialDate.add(Calendar.YEAR, -); //特准時間的年前
留意應用了 Calendar 對象的 add 辦法,可以更改 Calendar.YEAR 為隨意率性時光單元字段,完成各類時光單元下的日期盤算。
•盤算兩個時光的距離,例如盤算 2016 年 1 月 1 日間隔如今有若干天。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateString = "-- ::"; Calendar calendar = Calendar.getInstance(); long nowDate = calendar.getTime().getTime(); //Date.getTime() 取得毫秒型日期 try { long specialDate = sdf.parse(dateString).getTime(); long betweenDate = (specialDate - nowDate) / ( * * * ); //盤算距離若干天,則除以毫秒到天的轉換公式 System.out.print(betweenDate); } catch (ParseException e) { e.printStackTrace(); }
4. 日期比擬
翻看本身之前的代碼,發明每當停止日期比擬的操作時,總會先將日期轉為 “yyyyMMdd” 格局的字符串,再將字符串轉為數值,然後比擬數值年夜小。哈哈,一個簡略的比擬操作,卻要寫十幾行代碼,有點目不忍視。如今得說說准確地日期比擬姿態是怎樣樣的。
日期比擬普通有兩種辦法,關於 java.util.Date 或許 java.util.Calendar 都是通用的。一種是經由過程 after() 與 before() 辦法停止比擬,一種是經由過程 compareTo() 辦法停止比擬。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateString_01 = "2016-01-01 11:11:11"; String dateString_02 = "2016-01-02 11:11:11"; try { Date date_01 = sdf.parse(dateString_01); Date date_02 = sdf.parse(dateString_02); System.out.println(date_01.before(date_02)); //true,當 date_01 小於 date_02 時,為 true,不然為 false System.out.println(date_02.after(date_01)); //true,當 date_02 年夜於 date_01 時,為 true,不然為 false System.out.println(date_01.compareTo(date_02)); //-1,當 date_01 小於 date_02 時,為 -1 System.out.println(date_02.compareTo(date_01)); //1,當 date_02 年夜於 date_01 時,為 1 System.out.println(date_02.compareTo(date_02)); //0,當兩個日期相等時,為 0 } catch (ParseException e) { e.printStackTrace(); }
以上是本文給年夜家引見的Java中罕見的日期操作(取值、轉換、加減、比擬)的全體論述,願望年夜家愛好。