概述
Java.time 包的优势
使用Java8,新的日期时间API引入覆盖旧的日期时间API的以下缺点。
非线程安全 - java.util.Date不是线程安全的,因此开发者必须在使用日期处理并发性问题。新的日期时间API是不可变的,并且没有setter方法。 设计不佳 - 默认的开始日期从1900年,开始每月从1天从0开始,所以没有统一。不直接使用方法操作日期。新的API提供了这样操作实用方法。 困难的时区处理 - 开发人员必须编写大量的代码来处理时区的问题。新的API设计开发保持特定领域设计。
JAVA8引入了 java.time 包 - 下一个新的日期时间API。以下是一些在java.time程序包引入重要的类。
本地 - 简化日期时间API,没有时间处理区的复杂性。 时区 - 专业的日期时间API来处理各种时区。
java.time 本地日期时间类
java.time处理本地日期时间的主要类为
LocalDateTime,LocalDate,LocalTime;
LocalDateTime可以处理日期时间,可以看做作为LocalDate,LocalTime的复合; LocalDate主要处理日期(year,month,day,week); LocalTime主要处理时间(h,m,s)
LocalDateTime
静态构造方式摘要 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) 使用当前时间构造一个LocalDateTime对象 使用指定的数值创建一个LocalDateTime对象 (year,month,day从1开始,hour,min,second从0开始) 使用形如 “2017-2-28T13:29:30”的格式创建对象 使用纪元流逝秒创建对象,起点为 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的时间数值参数(可以链式调用) 获取LocalDateTime的时间数值参数 对LocalDateTime的某个时间参数值的流逝量 字符串格式:2017-2-28T13:29:30
注:localDateTime的 with,get,plus 方法,都有单项filed的实现 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
静态构造方式摘要 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) 使用当前时间构造一个LocalDate对象 使用指定的数值创建一个LocalDate对象 使用形如 “2017-2-28”的格式创建对象 使用纪元流逝天数创建对象 指定年份,使用一年的总天数创建对象 成员方法摘要 +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值,创建LocalDateTime对象 获取该对象的 ZoneDateTime对象 修改LocalDate的时间数值参数(可以链式调用) 获取LocalDate的时间数值参数 对LocalDate的某个时间参数值的流逝量 字符串格式:2017-2-28
注:同LocalDateTime ,LocalDate的 with,get,plus 方法,也都有单项filed的实现 with[Filed](int filed),主要Field值如下:
with,get: year,month,dayOfMonth,dayOfYear; plus : years,months,weeks,days;
LocalTime
静态构造方式摘要 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) 使用当前时间构造一个LocalDate对象 使用指定的数值创建一个LocalDate对象 使用形如 “2017-2-28”的格式创建对象 使用指定seconds创建对象 使用指定nanoSeconds创建对象 成员方法摘要 +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对象创建一个LocalDateTime对象 修改LocalTime的时间数值参数(可以链式调用) 获取LocalTime的时间数值参数 对LocalTime的某个时间参数值的流逝量 获取总Second参数 获取总Nano参数 字符串格式:10:15:00
注:同LocalDateTime ,LocalTime的 with,get,plus 方法,也都有单项filed的实现 with[Filed](int filed),主要Field值如下:
with,get: hour,minute,second; plus : hours,minutes,seconds,nanos;
LocalDateTime,LocalDate,LocalTime都实现了compareTo,equals方法; with,get方法中,实现 TemporalField 接口的类:java.time.temporal.ChronoField; plus方法中,实现 TemporalAmout 接口的类:java.time.Duration,java.time.Peroid
实现
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流逝秒数 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;.....//构建LocalDateTime LocalDateTime dateTime1 = LocalDateTime.now(); LocalDateTime dateTime2 = LocalDateTime.of(2017,1,1,0,0,0); System.out.println("datetime1:"+dateTime1+"ndatetime2:"+dateTime2);
//修改LocalDateTime数值 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数值 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进行数值增减 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);
输出结果:
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
最后
以上就是怕孤独信封为你收集整理的构造一个日期类java_Java8 新日期时间类(1)的全部内容,希望文章能够帮你解决构造一个日期类java_Java8 新日期时间类(1)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复