Java8 时间日期类操作

时间:2022-09-11 21:25:32

Java8 时间日期类操作

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

  • 线程安全
  • 不可变类,返回的都是新的对象

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

Java8 时间日期类操作

上图为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.****.net/u013066244/article/details/96443952

Java8 时间日期类操作的更多相关文章

  1. 整理总结 python 中时间日期类数据处理与类型转换(含 pandas)

    我自学 python 编程并付诸实战,迄今三个月. pandas可能是我最高频使用的库,基于它的易学.实用,我也非常建议朋友们去尝试它.--尤其当你本身不是程序员,但多少跟表格或数据打点交道时,pan ...

  2. 【2017-04-01】JS字符串的操作、时间日期的操作、函数、事件、动画基础

    一.字符串的操作 1.转大写: s.toLowerCase(); 2.转大写: s.toUpperCase(); 3.字符串的截取: s.substr(3,4);      -从索引3开始截取,截取4 ...

  3. Linux 时间日期类、搜索查找类、 压缩和解压类指令

    l 时间日期类 date指令-显示当前日期 基本语法 1) date (功能描述:显示当前时间) 2) date +%Y (功能描述:显示当前年份) 3) date +%m (功能描述:显示当前月份) ...

  4. OC - 时间日期类NSDate

    OC - 时间日期类NSDate //NSDate 时间日期类 NSDate 二进制数据流 { //1.获取当前时间 零时区的时间 //显示的是格林尼治的时间: 年-月-日 时:分:秒:+时区 NSD ...

  5. Linux时间日期类,压缩和解压类

    一.时间日期类 1.data指令 1.基本指令 date 显示当前日期 data +%Y 显示当前年份 data +%m 显示当前月份 data +%d 显示当前天 data +%Y-%m-%d %H ...

  6. linux学习之路第七天(时间日期类指令详解)

    时间日期类 1.date指令 date指令 - 显示当前日期 基本语法 1)date (功能描述:显示当前时间): 2) date + %Y (功能描述:显示当前年份) 3)date+%m( 功能描述 ...

  7. CentOS时间日期类语法

    目录 一.date时间日期类 1. date显示当前时间 2. date 显示非当前时间 3. date 设置系统时间 二.cal 查看日历 一.date时间日期类 date [OPTION]... ...

  8. linux 实用指令时间日期类

    linux 使用指令时间日期类 data 显示当前日期 基本语法 date 显示当前时间 date+%Y 显示当前年份 date+%m 显示当前月份 date+%d 显示当前是哪一天 date &qu ...

  9. 序列化和反序列化Java 8的时间/日期类

    序列化 假如有 Clock 类: public class Clock { private LocalDate localDate; private LocalTime localTime; priv ...

随机推荐

  1. 学习笔记:UpdatePanel控件

    Asp.net UpdatePanel 允许用户构建一个丰富的,以客户端为中心的应用程序,引用UpdatePanel控件,能够实现页面的部分刷新,一个包含scriptManage和 UpdatePan ...

  2. F - Prime Path

    题目大意: 素数路径 估计看数据就明白这道题什么意思了......给两个素数,都是四位数的素数,并且没有前导0,现在需要经过一种变换把一个素数转换成另一个,当然这种转换是有规则的,规则就是每次只能改变 ...

  3. 关于Java的发展前景

    各位看官觉得Java还能火几年?未来的发展方向是什么?

  4. 掌握一门语言Go

    摘要:Go语言的优势不必多说,通过本篇文章,让我们花时间来掌握一门外语,Let's Go! 关键字:Go语言,闭包,基本语法,函数与方法,指针,slice,defer,channel,goroutin ...

  5. vue--监听器

    vue当中的属性,侦听器watch computed可以根据数据的变化而变化,而watch也具备同样的功能 既然这么相似,那么两者的区别是什么呢 首先是执行顺序上有一些细微差别,dom加载完成后将立即 ...

  6. Java学习路线思维导图

  7. mysql_config_editor usage

    # mysql_config_eidtor is a tool to create a profile file $HOME/.mylogin.cnf, in which you can store ...

  8. Ehcache Monitor使用一例

    场景介绍:系统集成Shiro,使用Ehcache保存用户登录限制次数,常有用户密码被锁,影响工作效率. 在不考虑集成SSO,LDAP,也不引入身份校验,邮件,短信等解锁特性下.使用Ehcache Mo ...

  9. 使用node去爬虫

    let http = require('http'); let https = require('https');//引入node的https服务. let cheerio = require('ch ...

  10. keepalived基础原理

    keepalived介绍 设置初衷是为了高可用ipvs 通过脚本可以实现高可用nginx或者haproxy调度器, 基于vrrp协议完成一个固定的IP可以在集群中不同的节点进行流动.为ipvs集群的各 ...