java.time包使用指南初步了解
【摘要】 快速了解java.time包和内在内容,快速了解使用方法,帮助理解原理
写在前文:
java.time包内含丰富的类,不用觉得很麻烦也不用全部记下来,他们可以被分为四类:
1. date结尾的类,显示格式为yyyy-MM-dd。
2. time结尾的类,显示格式为HH-mm-ss-ns,其中1s=1000ns。
3. DateTime结尾的类,为1和2的结合,显示格式为yyyy-MM-ddTHH-mm-ss-ns,T可简单理解为分隔符。
4. TimeFormatter,这一类需要详细理解,可以初步理解为自定义时间显示格式(具体例子可看下方代码)。
需要注意的是,每一个“自定义格式”的Format只能改变同一个种类的对象,Local开头的LocalDate, LocalTime, LocalDateTime, LocalTimeFormatter;或者Offset开头的OffsetTime,OffsetDateTime。比如LocalTimeFormatter只能改变Local开头的三个对象。
结尾相同的类所用的方法大致类似,其中.of(自定义时间),.now(读取现在的时间),.getYear/Month/Day或者Hour/Minute/Second(返回你要的值)。
简单来说,java.time包的使用过程中可以一开始规定只用某一个种类的所属类(同一个开头搭配不同的结尾,如Local种类),可以有效帮助你理解和使用,方便查找api中的方法,也可以避免很多不同种类之间不能时间保存,时间格式,时间格式转换等问题。
1.java.time
Class:
LocalDate LocalTime LocalDateTime LocalTimeFormatter
LocalDate ld = LocalDate.now();//yyyy-MM-dd
LocalTime lt = LocalTime.now();//HH-mm-ss-ns
LocalDateTime ldt = LocalDateTime.now();//yyyy-MM-dd-HHTmm-ss-ns
ld/lt/ldt.getYear/Month/Day/Hour/Minute/Second();
LocalDate ld = LocalDate.of(year,month,day);//自定义时间
LocalTime lt = LocalTime.of(hour, minute, second);
LocalDateTime ldt = LocalDateTime.of(year,month,day,hour,minute,second);
LocalDateTime ldt = LocalDateTime.of(LocalDate.now(),LocalTime.now());
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");//规定格式
String formattedDate = ld.format(dtf);/转化并保存
LocalDate ld = LocalDate.parse("2018/08/08", dtf);
ld.atTime(int hour, int minute, int seconds);//仅更改时分秒,会显示T以分割,可以放lt
ld/lt/ldt.withYear/Week/Month(int);//作用同上
ld.compareTo()/equals()/isLeapYear();
ld.minus/plusDay/Month(long daysToSubstract);
lt.compareTo();
lt.minus/plusHours/Minutes(long timeToSubstract);
LocalTime lt = LocalTime.MIDNIGHT/NOON/MAX/MIN(midnight和min一样,0时0分)
ZoneId zone1 = ZoneId.of("Asia/首都");/ZoneId.of("UTC+8");
ZoneId default = ZoneId.systemDefault();
LocalTime time1 = LocalTime.now(zone1);
LocalDateTime ldt = ld.atTime(lt)/lt.atTime(ld);
LocalDate ld = ldt.toLocalDate();
LocalTime lt = ldt.toLocalTime();
2.java.time
Class:MonthDay OffsetTime OffsetDateTime Clock
MonthDay md = MonthDay.now();//存储当前月日
LocalDate ld = md.atYear(2020);
md.isValidYear(2020);//查看2020是否有今天
OffsetTime ot = OffsetTime.now();//不可更改的偏移时间
ot.getHour/Minute/Second();.toLocalTime();
OffsetDateTime odt = OffsetDateTime.now();
odt.getDayOfMonth/Week/Year();
odt.toLocalDate/Time();minusDay();
Clock c = Clock.systemDefaultZone(); c.getZone();//结果是类似的,查询所在时区
Clock c = Clock.systemUTC(); print(c.instant());//UTC的时间
3.java.time.Instant
Instant是不可改变的,改变等于新创建一个Instant对象,时间点的抽象
Instant i = Instant.now();
4.java.time.Duration & Period
时间段的抽象,
Duration主要是以整数值(秒和纳秒)来表示时间段,Period则是以周月年来表示时间段
LocalDateTime oneWeekAgoDateTime = ldt.plus(-2, ChronoUnit.WEEKS);
Duration duration = Duration.between(oneWeekAgoDateTime,LocalDateTime.now());
System.out.println(duration.getSeconds()); // 1209600
LocalDate oneWeekAgoDate = nowDate.plus(-1, ChronoUnit.WEEKS);
Period period = Period.between(oneWeekAgoDate, LocalDate.now());
System.out.println(period.getDays()); // 7
Duration 的 between 方法只能用于 Instant ,LocalTime 和 LocalDateTime 等对象的时间差计算。
而 Period 的 between 方法只能用于 LocalDate 的时间差计算。
而且不同的时间类型对象是不可以混用的,如试图计算 LocalDateTime 对象和 Instant 对象之间的时间差。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)