ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java8 时间日期类操作

2019-08-29 09:02:10  阅读:295  来源: 互联网

标签:Instant System 日期 LocalDateTime println 操作 LocalDate Java8 out


Java8 时间日期类操作

Java8的时间类有两个重要的特性

  • 线程安全
  • 不可变类,返回的都是新的对象
    显然,该特性解决了原来java.util.Date类与SimpleDateFormat线程不安全的问题。同时Java8的时间类提供了诸多内置方法,方便了对时间进行相应的操作。

image.png
上图为Java8时间类的覆盖范围
相关的类有

  • LocalDate
  • LocalTime
  • LocalDateTime
  • ZoneId
  • ZonedDateTime
  • Instant

Instant类

Instant类用来表示格林威治时间(UTC)开始的时间点,初始时间为1970-01-01T00:00:00Z。也就是从1970年一月一号开始计时,得到的秒值甚至是是纳秒值。该时间戳可以与日期时间转换。因此可以表示人类世界最完整的时间。该类相比原来java.util.Date类,精确到了纳秒级别。

获取当前的秒值和纳秒值

Instant instant = Instant.now();
System.out.println(instant);
System.out.println(instant.getEpochSecond());
System.out.println(instant.getNano());

结果如下
2019-08-28T07:59:54.979Z
1566979194
979000000

将指定秒值转为Instant。Instant.ofEpochSecond()方法。

Instant instant1 = Instant.ofEpochSecond(1566981233L);
System.out.println(instant1);

LocalDate、LocalTime、LocalDateTime、ZonedDateTime

Java8使用LocalDate、LocalTime、LocalDateTime、ZonedDateTime分别操作日期、时间、日期和时间。
这四个类的默认使用系统时区
获取当天日期及时间

LocalDate today = LocalDate.now();
System.out.println(today);

LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime);

LocalTime localTime = LocalTime.now();
System.out.println(localTime);

ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println(zonedDateTime);

ZoneId zoneId = ZoneId.systemDefault();
System.out.println(zoneId);

结果如下

2019-08-28
2019-08-28T17:42:01.964
17:42:01.965
2019-08-28T17:42:01.965+08:00[Asia/Shanghai]
Asia/Shanghai

指定日期2019-09-30并通过isBefore()判断是否今天在指定日期之前

LocalDate future = LocalDate.of(2019, 9, 30);
boolean before = today.isBefore(future);
System.out.println(before);

LocalDateTime转String 通过DateTimeFormatter指定转换格式

String formatStr = localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss"));
System.out.println(formatStr);

String转为LocalDate

String str = "2019-01-02";
LocalDate localDate2 = LocalDate.parse(str, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println(localDate2);

LocalDateTime与Instant的互相转换

获取当天的秒值和毫秒值。LocalDateTime转Instant获取时间戳。由于LocalDateTime并没有包含时区,转为Instant需要指明所在时区。北京时间也就是东八区ZoneOffset.of("+8")

long milliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
System.out.println(milliSecond);

long second = LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8"));
System.out.println(second);

Instant时间戳转LocalDateTime。使用LocalDateTime.ofInstant方法,需要指定转换为哪个时区的时间

LocalDateTime localDateTime2 = LocalDateTime.ofInstant(Instant.now(), ZoneId.systemDefault()); //使用系统默认时间
System.out.println(localDateTime2);

结果如下
2019-08-28T16:33:53.639

参考文章

https://blog.csdn.net/u013066244/article/details/96443952

标签:Instant,System,日期,LocalDateTime,println,操作,LocalDate,Java8,out
来源: https://www.cnblogs.com/helloDuo/p/11427655.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有