构造一个日期类java_Java8 新日期时间类(1)
Java.time 包的優(yōu)勢
使用Java8,新的日期時間API引入覆蓋舊的日期時間API的以下缺點。
非線程安全 - java.util.Date不是線程安全的,因此開發(fā)者必須在使用日期處理并發(fā)性問題。新的日期時間API是不可變的,并且沒有setter方法。? 設(shè)計不佳 - 默認(rèn)的開始日期從1900年,開始每月從1天從0開始,所以沒有統(tǒng)一。不直接使用方法操作日期。新的API提供了這樣操作實用方法。? 困難的時區(qū)處理 - 開發(fā)人員必須編寫大量的代碼來處理時區(qū)的問題。新的API設(shè)計開發(fā)保持特定領(lǐng)域設(shè)計。
JAVA8引入了 java.time 包 - 下一個新的日期時間API。以下是一些在java.time程序包引入重要的類。
本地 - 簡化日期時間API,沒有時間處理區(qū)的復(fù)雜性。? 時區(qū) - 專業(yè)的日期時間API來處理各種時區(qū)。
java.time 本地日期時間類
java.time處理本地日期時間的主要類為
LocalDateTime,LocalDate,LocalTime;
LocalDateTime可以處理日期時間,可以看做作為LocalDate,LocalTime的復(fù)合; LocalDate主要處理日期(year,month,day,week); LocalTime主要處理時間(h,m,s)
LocalDateTime
靜態(tài)構(gòu)造方式摘要 static LocalDateTime? static LocalDateTime? ? ?static LocalDateTime static LocalDateTime now() of(int year,int month,int dayofMonth,int hour,int minute[,int second[,int nanoSeconds]] ) parse(CharSequence text) ofEpochSecond(long epochSeconds,int nanoSeconds,ZoneOffset offset)? 使用當(dāng)前時間構(gòu)造一個LocalDateTime對象 使用指定的數(shù)值創(chuàng)建一個LocalDateTime對象 (year,month,day從1開始,hour,min,second從0開始)? 使用形如 “2017-2-28T13:29:30”的格式創(chuàng)建對象 使用紀(jì)元流逝秒創(chuàng)建對象,起點為 1970-1-1T00:00:00,offset一般使用ZoneOffset.UTF 成員方法摘要 +LocalDate +LocalTime +ZoneDateTime? +LocalDateTime +int +LocalDateTime? ?+String? toLocalDate() toLocalTime() atZone()? with(TemporalField field,long value) get(TemporalField field) plus(TemporalAmount amoutToAdd) plus(long amountToAdd,TemporaUnit unit)? toString() 獲取該對象的 LocalDate對象 獲取該對象的 LocalTime對象 獲取該對象的 ZoneDateTime對象? 修改LocalDateTime的時間數(shù)值參數(shù)(可以鏈?zhǔn)秸{(diào)用) 獲取LocalDateTime的時間數(shù)值參數(shù) 對LocalDateTime的某個時間參數(shù)值的流逝量? ?字符串格式:2017-2-28T13:29:30
注:localDateTime的 with,get,plus 方法,都有單項filed的實現(xiàn)? with[Filed](int filed),如 withDayOfMonth(int days),主要Field值如下:
with,get:? ?year,month,dayOfMonth,hour,minute,second,dayOfYear; plus :? ? years,months,weeks,days,hours,minutes,seconds,nanos;
LocalDate
靜態(tài)構(gòu)造方式摘要 static LocalDate? static LocalDate? ? static LocalDate static LocalDate static LocalDate now() of(int year,int month[,int dayofMonth] )? parse(CharSequence text) ofEpochDay(long epochDay) ofYearDay(int year,int dayOfyear) 使用當(dāng)前時間構(gòu)造一個LocalDate對象 使用指定的數(shù)值創(chuàng)建一個LocalDate對象? ?使用形如 “2017-2-28”的格式創(chuàng)建對象 使用紀(jì)元流逝天數(shù)創(chuàng)建對象 指定年份,使用一年的總天數(shù)創(chuàng)建對象 成員方法摘要 +LocalDateTime +LocalDateTime +ZoneDateTime? +LocalDateTime +int +LocalDateTime? ?+String? asStartOfDay() atTime(int hour,int minute[,int second]) atZone()? with(TemporalField field,long value) get(TemporalField field) plus(TemporalAmount amoutToAdd) plus(long amountToAdd,TemporaUnit unit)? toString() 獲取該對象的 LocalDateTime對象(time值歸零) 使用指定time值,創(chuàng)建LocalDateTime對象 獲取該對象的 ZoneDateTime對象? 修改LocalDate的時間數(shù)值參數(shù)(可以鏈?zhǔn)秸{(diào)用) 獲取LocalDate的時間數(shù)值參數(shù) 對LocalDate的某個時間參數(shù)值的流逝量? ?字符串格式:2017-2-28
注:同LocalDateTime ,LocalDate的 with,get,plus 方法,也都有單項filed的實現(xiàn)? with[Filed](int filed),主要Field值如下:
with,get:? ?year,month,dayOfMonth,dayOfYear; plus :? ? years,months,weeks,days;
LocalTime
靜態(tài)構(gòu)造方式摘要 static LocalTime? static LocalTime? ? static LocalTime static LocalTime static LocalTime now() of(int hour,int minute[,int dayofMonth] )? parse(CharSequence text) ofSecondOfDay(long seconds) ofNanoOfDay(long nanoSeconds) 使用當(dāng)前時間構(gòu)造一個LocalDate對象 使用指定的數(shù)值創(chuàng)建一個LocalDate對象? ?使用形如 “2017-2-28”的格式創(chuàng)建對象 使用指定seconds創(chuàng)建對象 使用指定nanoSeconds創(chuàng)建對象 成員方法摘要 +LocalDateTime? +LocalTime +int +LocalTime? ?+int +int +String? atDate(LocalDate date)? with(TemporalField field,long value) get(TemporalField field) plus(TemporalAmount amoutToAdd) plus(long amountToAdd,TemporaUnit unit)? toSecondOfDay() toNanoOfDay() toString() 于一個LocalDate對象創(chuàng)建一個LocalDateTime對象? 修改LocalTime的時間數(shù)值參數(shù)(可以鏈?zhǔn)秸{(diào)用) 獲取LocalTime的時間數(shù)值參數(shù) 對LocalTime的某個時間參數(shù)值的流逝量? ?獲取總Second參數(shù) 獲取總Nano參數(shù) 字符串格式:10:15:00
注:同LocalDateTime ,LocalTime的 with,get,plus 方法,也都有單項filed的實現(xiàn)? with[Filed](int filed),主要Field值如下:
with,get:? ?hour,minute,second; plus :? ? hours,minutes,seconds,nanos;
LocalDateTime,LocalDate,LocalTime都實現(xiàn)了compareTo,equals方法; with,get方法中,實現(xiàn) TemporalField 接口的類:java.time.temporal.ChronoField; plus方法中,實現(xiàn) TemporalAmout 接口的類:java.time.Duration,java.time.Peroid
實現(xiàn)
TemporalUnit
接口的類:java.time.temporal.
ChronoUnit
ChronoField、
ChronoUnit常量摘要
ChronoField ChronoUnit YEAR? ? ? ? ? ? ? ? ? ? MONTH_OF_YEAR? ? ? ? DAY_OF_MONTH DAY_OF_WEEK DAY_OF_YEAR? ? ? ? ? HOUR_OF_DAY? ? ?24小時制hour HOUR_OF_AMPM? ? 12小時制hour AMPM_OF_DAY? ? ?0(AM),1(PM)? MINUTE_OF_HOUR MINUTE_OF_DAY SECOND_OF_MINUTE SECOND_OF_OF_DAY? OFFSET_SECOND? ? ?UTF流逝秒數(shù) MILLI_OF_SECOND MILLI_OF_DAY NANO_OF_SECOND NANO_OF_DAY? FOREVER? ? ?CENTURIES? YEARS MONTHS WEEKS DAYS? HOURS MINUTES SECONDS NANOS
使用示例
import java.time.*;import java.time.temporal.ChronoField;import java.time.temporal.ChronoUnit;.....//構(gòu)建LocalDateTime? ? ? ? LocalDateTime dateTime1 = LocalDateTime.now();? ? ? ? LocalDateTime dateTime2? = LocalDateTime.of(2017,1,1,0,0,0);? ? ? ? System.out.println("datetime1:"+dateTime1+"\ndatetime2:"+dateTime2);
//修改LocalDateTime數(shù)值? ? ? ? LocalDateTime dateTime3 = dateTime1.with(ChronoField.YEAR,1992).with(ChronoField.MONTH_OF_YEAR,9).with(ChronoField.DAY_OF_MONTH,16);? ? ? ? System.out.println("datetime3:"+dateTime3);
//獲取LocalDateTime數(shù)值? ? ? ? int year_dateTime3 = dateTime3.get(ChronoField.YEAR);? ? ? ? Month month_dateTime3 = dateTime3.getMonth();? ? ? ? int day_dateTime3 = dateTime3.get(ChronoField.DAY_OF_MONTH);? ? ? ? System.out.println("year:"+year_dateTime3+"\nmonth:"+month_dateTime3+"\nday:"+day_dateTime3);
//對LocalDateTime進行數(shù)值增減? ? ? ? LocalDateTime dateTime4 = dateTime3.plus(10,ChronoUnit.MONTHS).plusDays(100).plusHours(120);? ? ? ? System.out.println("datetime4:"+dateTime4);? ? ? ? System.out.println("datetime4:"+dateTime4.toEpochSecond(ZoneOffset.UTC));
//將LocalDateTime裝載到LocalDate和LocalTime? ? ? ? LocalDate date1 = dateTime4.toLocalDate();? ? ? ? LocalTime time1 = dateTime4.toLocalTime();? ? ? ? System.out.println("date1:"+date1);? ? ? ? System.out.println("time1:"+time1);
輸出結(jié)果:
datetime1:2017-02-28T19:42:09.550datetime2:2017-01-01T00:00datetime3:1992-09-16T19:42:09.550year:1992month:SEPTEMBERday:16datetime4:1993-10-29T19:42:09.550datetime4:751923729date1:1993-10-29time1:19:42:09.550
總結(jié)
以上是生活随笔為你收集整理的构造一个日期类java_Java8 新日期时间类(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java支持泛型_Java自学-泛型 支
- 下一篇: java git服务器_Windows平