Java8时间api转换

1 篇文章 0 订阅
1 篇文章 0 订阅

1、LocalDateTime互转Date

LocalDateTime nowLocalDateTime = LocalDateTime.now();
// -------------------------------------------------------------------------------------------------------------
// LocalDateTime -> Date
Date date = Date.from(nowLocalDateTime.atZone(ZoneId.systemDefault()).toInstant());
System.out.printf("date:%s%n", date);

// Date -> LocalDateTime
LocalDateTime localDateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
System.out.printf("localDateTime:%s%n", localDateTime);

2、LocalDateTime互转Timestamp

// LocalDateTime -> timestamp
long timestamp = nowLocalDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
System.out.printf("timestamp:%s%n", timestamp);

// timestamp -> LocalDateTime
LocalDateTime localDateTime1 = Instant.ofEpochMilli(timestamp).atZone(ZoneId.systemDefault()).toLocalDateTime();
System.out.printf("localDateTime1:%s%n", localDateTime1);A

3、Date互转Timestamp

// Date -> timestamp
long l = date.toInstant().toEpochMilli();
System.out.printf("l:%s%n", l);

// timestamp -> Date
Date from = Date.from(Instant.ofEpochMilli(l));
System.out.printf("from:%s%n", from);

4、LocalDateTime互转LocalDate

// LocalDateTime-> LocalDate
LocalDate localDate = nowLocalDateTime.toLocalDate();
System.out.printf("localDate:%s%n", localDate);
// LocalDate-> LocalDateTime
// 因为LocalDate是没有时分秒的,所以转成LocalDateTime需要执行时分秒信息
LocalDateTime of1 = LocalDateTime.of(localDate, LocalTime.MIN);
System.out.printf("转成当天的开始时间:%s%n", of1);
LocalDateTime of2 = LocalDateTime.of(localDate, LocalTime.MAX);
System.out.printf("转成当天的结束时间:%s%n", of2);
LocalDateTime of3 = LocalDateTime.of(localDate, LocalTime.of(12, 59, 59));
System.out.printf("转成当天的自定义时间:%s%n", of2);

5、关于时区

LocalDateTime互转Date,需要指定时区信息

// 关于 atZone
// 获取所有的时区
Set<String> zoneIds = ZoneId.getAvailableZoneIds();
zoneIds.forEach(zoneId -> System.out.printf("zoneId:%s | ", zoneId));

// 一般使用默认的时区,中国的话就是东8区,Shanghai, 下面这个三个都是表示东8区,是相等的
// ZoneId.systemDefault() == ZoneId.of("Asia/Shanghai") == ZoneId.of("+8")
// 默认的时区,机器在中国的话,就是东8区
Date date1 = Date.from(nowLocalDateTime.atZone(ZoneId.systemDefault()).toInstant());
System.out.printf("date1:%s%n", date1);
// 上海时区,就是东8区
Date date2 = Date.from(nowLocalDateTime.atZone(ZoneId.of("Asia/Shanghai")).toInstant());
System.out.printf("date2:%s%n", date2);
// 指定东8区
Date date3 = Date.from(nowLocalDateTime.atZone(ZoneId.of("+8")).toInstant());
System.out.printf("date3:%s%n", date3);

6、获取两个时间的时间差

// 正确的 小的时间放在第1个参数 大的时间放在第2个参数, 100
long seconds1 = Duration.between(nowLocalDateTime, nowLocalDateTime.plusSeconds(100)).getSeconds();
System.out.printf("相差秒:%s%n", seconds1);
// 错误的, -100
long seconds2 = Duration.between(nowLocalDateTime.plusSeconds(100), nowLocalDateTime).getSeconds();
System.out.printf("相差秒:%s%n", seconds2);
//
long l1 = Duration.between(nowLocalDateTime, nowLocalDateTime.plusSeconds(100)).toMillis();
System.out.printf("相差毫秒:%s%n", l1);
long l2 = Duration.between(nowLocalDateTime, nowLocalDateTime.plusSeconds(100)).getSeconds();
System.out.printf("相差秒:%s%n", l2);
long l3 = Duration.between(nowLocalDateTime, nowLocalDateTime.plusSeconds(100)).toMinutes();
System.out.printf("相差分钟:%s%n", l3);
long l4 = Duration.between(nowLocalDateTime, nowLocalDateTime.plusSeconds(3601)).toHours();
System.out.printf("相差小时:%s%n", l4);
long l5 = Duration.between(nowLocalDateTime, nowLocalDateTime.plusSeconds(3600 * 24 + 3600 * 24)).toDays();
System.out.printf("相差天:%s%n", l5);

7、时间格式化

// date 时间格式化(每个线程里面必须new一个dateFormat出来, 多线程不能共享)
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = dateFormat.format(date);
System.out.printf("Date时间格式化:%s%n", format);

// LocalDate时间格式化 (备注dateTimeFormatter可以作为全局的唯一参数, 没有并发问题)
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String format1 = nowLocalDateTime.toLocalDate().format(dateTimeFormatter);
System.out.printf("LocalDate时间格式化:%s%n", format1);

// LocalDateTime时间格式化 (备注dateTimeFormatter可以作为全局的唯一参数, 没有并发问题)
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String format2 = nowLocalDateTime.format(dateTimeFormatter);
System.out.printf("LocalDateTime时间格式化:%s%n", format2);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值