Java8 时间日期类操作
Java8 时间日期类操作
Java8的时间类有两个重要的特性
- 线程安全
- 不可变类,返回的都是新的对象
显然,该特性解决了原来java.util.Date类与SimpleDateFormat线程不安全的问题。同时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.csdn.net/u013066244/article/details/96443952
Java8 时间日期类操作的更多相关文章
- 整理总结 python 中时间日期类数据处理与类型转换(含 pandas)
我自学 python 编程并付诸实战,迄今三个月. pandas可能是我最高频使用的库,基于它的易学.实用,我也非常建议朋友们去尝试它.--尤其当你本身不是程序员,但多少跟表格或数据打点交道时,pan ...
- 【2017-04-01】JS字符串的操作、时间日期的操作、函数、事件、动画基础
一.字符串的操作 1.转大写: s.toLowerCase(); 2.转大写: s.toUpperCase(); 3.字符串的截取: s.substr(3,4); -从索引3开始截取,截取4 ...
- Linux 时间日期类、搜索查找类、 压缩和解压类指令
l 时间日期类 date指令-显示当前日期 基本语法 1) date (功能描述:显示当前时间) 2) date +%Y (功能描述:显示当前年份) 3) date +%m (功能描述:显示当前月份) ...
- OC - 时间日期类NSDate
OC - 时间日期类NSDate //NSDate 时间日期类 NSDate 二进制数据流 { //1.获取当前时间 零时区的时间 //显示的是格林尼治的时间: 年-月-日 时:分:秒:+时区 NSD ...
- Linux时间日期类,压缩和解压类
一.时间日期类 1.data指令 1.基本指令 date 显示当前日期 data +%Y 显示当前年份 data +%m 显示当前月份 data +%d 显示当前天 data +%Y-%m-%d %H ...
- linux学习之路第七天(时间日期类指令详解)
时间日期类 1.date指令 date指令 - 显示当前日期 基本语法 1)date (功能描述:显示当前时间): 2) date + %Y (功能描述:显示当前年份) 3)date+%m( 功能描述 ...
- CentOS时间日期类语法
目录 一.date时间日期类 1. date显示当前时间 2. date 显示非当前时间 3. date 设置系统时间 二.cal 查看日历 一.date时间日期类 date [OPTION]... ...
- linux 实用指令时间日期类
linux 使用指令时间日期类 data 显示当前日期 基本语法 date 显示当前时间 date+%Y 显示当前年份 date+%m 显示当前月份 date+%d 显示当前是哪一天 date &qu ...
- 序列化和反序列化Java 8的时间/日期类
序列化 假如有 Clock 类: public class Clock { private LocalDate localDate; private LocalTime localTime; priv ...
随机推荐
- 学习:C++中的头文件和源文件详解
一.C++编译模式: 通常,在一个C++程序中,只包含两类文件――.cpp文件和.h文件.其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码:而.h文件则被称作C++头文件,里面放的也是 ...
- Python连接oracle数据库 例子一
step1:下载cx_Oracle模块,cmd--pip install cx_Oracle step2: 1 import cx_Oracle #引用模块cx_Oracle 2 conn=cx_Or ...
- learning scala zipAll
If two Iterables aren't the same size, then zipAll can provide fillers for what it couldn't find a c ...
- WinDbg常用命令系列---!analyze
!analyze命令简介 这个!analyze扩展显示有关当前异常或错误检查的信息. 用户模式: !analyze [-v] [-f | -hang] [-D BucketID] !analyze - ...
- [RN] React Native 生成 Android APK
在用模拟器或者真机调试完App后,需要将App打包成Apk发布文件. 下面简单记录下打包步骤: 第一:生成签名密钥 这一步的操作主要是生成需要的签名密钥,供android调用,生成的文件待用 在项目根 ...
- 洛谷 P1536 村村通
目录 题目 思路 \(Code\) 题目 P1536 村村通 思路 并查集,一开始连通快的数量为\(n\),输入\(m\)条边时如果该边起点和终点不在同一联通块内就合并并让联通块数量减一,最后输出联通 ...
- 计蒜客 39268.Tasks-签到 (The 2019 ACM-ICPC China Shannxi Provincial Programming Contest A.) 2019ICPC西安邀请赛现场赛重现赛
Tasks It's too late now, but you still have too much work to do. There are nn tasks on your list. Th ...
- 微信小程序前端function封装
funtion的封装 utils =>http.js var tips = { 1: "没有网络", 999: "无效的请求", 5000: " ...
- git下载指定分支到本地
从网上查了很多方法有很多种,自我感觉下面这种更方便 git clone xxx.git --branch 分支名/dev/...
- VLAD算法浅析, BOF、FV比较
划重点 ================================================= BOF.FV.VLAD等算法都是基于特征描述算子的特征编码算法,关于特征描述算子是以SIFT ...