java instant_Java8中的LocalDateTime、Instant、DateTimeFormatter

[TOC]

1. 概要

Java8出现的 Instant 类似于 Date ,LocalDateTime 类似于 Calendar,DateTimeFormatter 类似于 SimpleDateFormat,由于 SimpleDateFormat 是线程不安全的(一般使用 SimpleDateFormat 的时会把它定义成静态变量,从而避免频繁地创建它的对象实例,但 SimpleDateFormat 内部使用 Calendar 去完成日期的转换,多线程情况下可能会出现线程不安全情况),推荐使用 Instant代替 Date,LocalDateTime 代替 Calendar,DateTimeFormatter 代替 SimpleDateFormat。具体用法如下例子,更多参考jdk8 api方法。

2. LocalDateTime

// 输出当前时间:2019-04-24T19:41:21.858

LocalDateTime now = LocalDateTime.now();

System.out.println(now);

// 格式化时间,输出:2019年04月24日 19:49:25

LocalDateTime time = LocalDateTime.now();

String timeStr = time.format(DateTimeFormatter.ofPattern("yyyy年年MM月dd日 HH:mm:ss"));

System.out.println(timeStr);

// 当前时间增加20分钟

LocalDateTime afterPlusTime = LocalDateTime.now().plus(20, ChronoUnit.MINUTES);

System.out.println(afterPlusTime);

// 创建开始和结束时间,并计算中间差值

LocalDateTime start = LocalDateTime.of(1992, 8, 13, 0, 0, 0);

LocalDateTime end = LocalDateTime.of(2019, 4, 25, 0, 0);

long diff = LocalDateTimeUtils.betweenTwoTime(start, end, ChronoUnit.YEARS);

System.out.println(diff+"年"); // 26

boolean b = start.isAfter(end);

System.out.println(b); // false

//获取秒数 (东8区,也就是北京时间)

Long second = LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8"));

//获取毫秒数(东8区,也就是北京时间)

Long milliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();

3. Instant

Instant now = Instant.now(); // 2019-04-24T12:30:34.349Z

long currentSecond = now.getEpochSecond(); // 秒数:1556109034

long currentMilli = now.toEpochMilli(); // 毫秒数:1556109034349

Instant afterPlusSecondInstant = now.plusSeconds(1000); // 秒数增加1000

boolean b = now.isBefore(afterPlusSecondInstant); // 比较

4. DateTimeFormatter

// 输出:2019年04月24日 20:53:23

DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");

LocalDateTime time = LocalDateTime.now();

String formatResult = time.format(df);

// 输出:20190424

LocalDateTime time = LocalDateTime.now();

String formatResult = time.format(DateTimeFormatter.BASIC_ISO_DATE);

除了DateTimeFormatter.BASIC_ISO_DATE,还有以下格式,如:

ISO_DATE --> 2019-04-24

ISO_LOCAL_DATE --> 2019-04-24

ISO_LOCAL_TIME --> 20:59:48.42

ISO_TIME --> 21:00:38.256

ISO_LOCAL_DATE_TIME --> 2019-04-24T21:01:11.083

.......

5. LocalDateTime、Instant、DateTimeFormatter 与Date的转换

Instant instant = Instant.now();

Date date = Date.from(instant); // Instant转换为Date

Instant instant2 = date.toInstant(); // Date转换为Instant

// Date 与 LocalDateTime 的转换是通过 Instant 中间的转换来进行的

Date date = new Date();

LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(),ZoneId.systemDefault()); // Date转换为LocalDateTime

LocalDateTime localDateTime = LocalDateTime.now();

Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();

Date date = Date.from(instant); // LocalDateTime转换为Date

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值