Java8中LocalDateTime与时间戳timestamp的互相转换及ChronoUnit工具类import java.time.*;import java.time.format.DateTimeFormatter;

import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalUnit;
import java.util.Date; /**
* Java8中LocalDateTime与时间戳timestamp的互相转换
*/
public class DateUtils { /**
*
* @param timestamp
* @return
*/
public static LocalDateTime timestamToDatetime(long timestamp){
Instant instant = Instant.ofEpochMilli(timestamp);
return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
} /**
*获取指定日期的毫秒
* @param ldt
* @return
*/
public static long datatimeToTimestamp(LocalDateTime ldt){
// long timestamp = ldt.toInstant(ZoneOffset.of("+8")).toEpochMilli();
// return timestamp;
ZoneId zone = ZoneId.systemDefault();
long timestamp = ldt.atZone(zone).toInstant().toEpochMilli();
return timestamp;
}
  

//获取指定日期的秒


public static LocalDateTime timestamToDatetimeSeconds(long timestamp){
Instant instant = Instant.ofEpochSecond(timestamp);
return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
} /**
* 获取指定日期的秒
* @param ldt
* @return
*/
public static long datatimeToTimestampSeconds(LocalDateTime ldt){
// long timestamp = ldt.toInstant(ZoneOffset.of("+8")).getEpochSecond();
// return timestamp; ZoneId zone = ZoneId.systemDefault();
long timestamp = ldt.atZone(zone).toInstant().getEpochSecond();
return timestamp;
} //Date转换为LocalDateTime
public static LocalDateTime convertDateToLDT(Date date) {
return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
} //LocalDateTime转换为Date
public static Date convertLDTToDate(LocalDateTime time) {
return Date.from(time.atZone(ZoneId.systemDefault()).toInstant());
} //获取指定时间的指定格式
public static String formatTime(LocalDateTime time,String pattern) {
return time.format(DateTimeFormatter.ofPattern(pattern));
} //获取当前时间的指定格式
public static String formatNow(String pattern) {
return formatTime(LocalDateTime.now(), pattern);
} //日期加上一个数,根据field不同加不同值,field为ChronoUnit.*
public static LocalDateTime plus(LocalDateTime time, long number, TemporalUnit field) {
return time.plus(number, field);
} //日期减去一个数,根据field不同减不同值,field参数为ChronoUnit.*
public static LocalDateTime minu(LocalDateTime time, long number, TemporalUnit field){
return time.minus(number,field);
} /**
* 获取两个日期的差 field参数为ChronoUnit.*
* @param startTime
* @param endTime
* @param field 单位(年月日时分秒)
* @return
*/
public static long betweenTwoTime(LocalDateTime startTime, LocalDateTime endTime, ChronoUnit field) {
Period period = Period.between(LocalDate.from(startTime), LocalDate.from(endTime));
if (field == ChronoUnit.YEARS) return period.getYears();
if (field == ChronoUnit.MONTHS) return period.getYears() * 12 + period.getMonths();
return field.between(startTime, endTime);
} //获取一天的开始时间,2017,7,22 00:00
public static LocalDateTime getDayStart(LocalDateTime time) {
return time.withHour(0)
.withMinute(0)
.withSecond(0)
.withNano(0);
} //获取一天的结束时间,2017,7,22 23:59:59.999999999
public static LocalDateTime getDayEnd(LocalDateTime time) {
return time.withHour(23)
.withMinute(59)
.withSecond(59)
.withNano(999999999);
} public static void main(String[] args) {
/**
* 1664509534345
* ldt=2022-09-30T11:45:34.345
* 1664509534
* ldtSecond=2022-09-30T11:45:34
*/ long dt = datatimeToTimestamp(LocalDateTime.now());
System.out.println(dt);
LocalDateTime ldt = timestamToDatetime(dt);
System.out.println("ldt=" + ldt); long dtSecond = datatimeToTimestampSeconds(LocalDateTime.now());
System.out.println(dtSecond);
LocalDateTime ldtSecond = timestamToDatetimeSeconds(dtSecond);
System.out.println("ldtSecond=" + ldtSecond); //2022年09月30日 11:52:49
System.out.println(formatNow("yyyy年MM月dd日 HH:mm:ss")); /**
* 年:1
* 月:13
* 日:396
* 半日:792
* 小时:9506
* 分钟:570362
* 秒:34221720
* 毫秒:34221720000
*/
LocalDateTime start = LocalDateTime.of(1993, 10, 13, 11, 11);
LocalDateTime end = LocalDateTime.of(1994, 11, 13, 13, 13);
System.out.println("年:" + betweenTwoTime(start, end, ChronoUnit.YEARS));
System.out.println("月:" + betweenTwoTime(start, end, ChronoUnit.MONTHS));
System.out.println("日:" + betweenTwoTime(start, end, ChronoUnit.DAYS));
System.out.println("半日:" + betweenTwoTime(start, end, ChronoUnit.HALF_DAYS));
System.out.println("小时:" + betweenTwoTime(start, end, ChronoUnit.HOURS));
System.out.println("分钟:" + betweenTwoTime(start, end, ChronoUnit.MINUTES));
System.out.println("秒:" + betweenTwoTime(start, end, ChronoUnit.SECONDS));
System.out.println("毫秒:" + betweenTwoTime(start, end, ChronoUnit.MILLIS)); /**
* 2022年09月30日 12:12
* 2024年09月30日 11:52
*/
//增加二十分钟
System.out.println(formatTime(plus(LocalDateTime.now(),
20,
ChronoUnit.MINUTES), "yyyy年MM月dd日 HH:mm"));
//增加两年
System.out.println(formatTime(plus(LocalDateTime.now(),
2,
ChronoUnit.YEARS), "yyyy年MM月dd日 HH:mm")); /**
* 2022-09-30T00:00
* 2022-09-30T23:59:59.999999999
*/
System.out.println(getDayStart(LocalDateTime.now()));
System.out.println(getDayEnd(LocalDateTime.now())); //Get the current date
LocalDate today = LocalDate.now();
System.out.println("Current date: " + today);
//add 1 week to the current date
LocalDate nextWeek = today.plus(1, ChronoUnit.WEEKS);
System.out.println("Next week: " + nextWeek);
//add 1 month to the current date
LocalDate nextMonth = today.plus(1, ChronoUnit.MONTHS);
System.out.println("Next month: " + nextMonth);
//add 1 year to the current date
LocalDate nextYear = today.plus(1, ChronoUnit.YEARS);
System.out.println("Next year: " + nextYear);
//add 10 years to the current date
LocalDate nextDecade = today.plus(1, ChronoUnit.DECADES);
System.out.println("Date after ten year: " + nextDecade); /**
* ChronoUnit====相差年-1
* 相差{-12}月,
* 相差天-365
*/
//获取当前时间(2022-09-30)
LocalDate today2 = LocalDate.now();
//将String转LocalDateTime
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate collectTimeDate = LocalDate.parse("2023-09-30",df);
//判断相差多少天
System.out.println("ChronoUnit====相差年" + ChronoUnit.YEARS.between(collectTimeDate,today2)); System.out.println(
"相差{"+ChronoUnit.MONTHS.between(collectTimeDate,today2)+"}月," );
; System.out.println(
"相差天"+ ChronoUnit.DAYS.between(collectTimeDate,today2));
; /**
* ===ChronoUnit====相差年1
* 相差{12}月,
* 相差天365
*/ //判断相差多少天
System.out.println("===ChronoUnit====相差年" + ChronoUnit.YEARS.between(today2,collectTimeDate)); System.out.println(
"相差{"+ChronoUnit.MONTHS.between(today2,collectTimeDate)+"}月," );
; System.out.println(
"相差天"+ ChronoUnit.DAYS.between(today2,collectTimeDate));
; } }

Java8中LocalDateTime与时间戳timestamp的互相转换及ChronoUnit工具类的更多相关文章

  1. Java中Date类型如何向前向后滚动时间,( 附工具类)

    Java中的Date类型向前向后滚动时间(附工具类) 废话不多说,先看工具类: import java.text.SimpleDateFormat; import java.util.Calendar ...

  2. 如何在类中根据枚举值,获取枚举的message的工具类

    枚举类为: public enum OrderStatusEnum implements CondeEnum{ NEW(0, "新订单"), FINISHED(1, "完 ...

  3. java工具类去掉字符串String中的.点。android开发java程序员常用工具类

    下面是工具类详细代码: package com.qq986945193.david; /** * qq986945193 Project * ============================= ...

  4. JAVA8 中 LocalDateTime的使用小栗子

    LocalDate givenDate = LocalDate.parse("2019-04-23",DateTimeFormatter.ofPattern("yyyy- ...

  5. js 时间戳转yyyy-MM-dd HH-mm-ss工具类

    转载自:https://blog.csdn.net/shan1774965666/article/details/55049819 在web开发中,我们经常需要用js将时间戳转yyyy-MM-dd H ...

  6. java8中的日期和时间API

    一.背景 jdk 1.8 之前, Java 时间使用java.util.Date 和 java.util.Calendar 类. Date today = new Date(); System.out ...

  7. TreeUtils工具类一行代码实现列表转树 实战Java8 三级菜单 三级分类 附视频

    一.序言 在日常一线开发过程中,总有列表转树的需求,几乎是项目的标配,比方说做多级菜单.多级目录.多级分类等,有没有一种通用且跨项目的解决方式呢?帮助广大技术朋友给业务瘦身,提高开发效率. 本文将基于 ...

  8. AQS的子类在各个同步工具类中的使用情况

    AQS AQS(AbstractQueuedSynchronizer)是 java.util.concurrent的基础.J.U.C中宣传的封装良好的同步工具类Semaphore.CountDownL ...

  9. java中的Arrays这个工具类你真的会用吗

    Java源码系列三-工具类Arrays ​ 今天分享java的源码的第三弹,Arrays这个工具类的源码.因为近期在复习数据结构,了解到Arrays里面的排序算法和二分查找等的实现,收益匪浅,决定研读 ...

  10. Springboot在工具类(Util)中使用@Autowired注入Service

    1. 使用@Component注解标记工具类MailUtil: 2. 使用@Autowired注入我们需要的bean: 3. 在工具类中编写init()函数,并使用@PostConstruct注解标记 ...

随机推荐

  1. 如何避免JS内存泄漏?

    ​ 简介: 很多开发者可能平时并不关心自己维护的页面是否存在内存泄漏,原因可能是刚开始简单的页面内存泄漏的速度很缓慢,在造成严重卡顿之前可能就被用户刷新了,问题也就被隐藏了,但是随着页面越来越复杂,尤 ...

  2. 记录一个HttpClient超时连接配置不生效的问题排查过程

    现象 首先有一个被服务由于内存有限,导致巨卡.导致调用他的服务出现线程阻塞.jstack打印线程池如下所示: 开始排查解决问题 第一步:检查代码看是否超时设置是否正确,因为感觉超时设置正确不可能阻塞. ...

  3. ADV7123驱动VGA显示色条

    VGA显示色条-基于ADV7123 用ADV7123代替权电阻网络,执行数模转换,差别在于rgb都变成8位,显示的色彩更多.控制端口多了3个:像素时钟,复合同步信号(不用就置0),消隐信号. 相对权电 ...

  4. 51k+ Star!动画图解、一键运行的数据结构与算法教程!

    大家好,我是 Java陈序员. 我们都知道,<数据结构与算法> -- 是程序员的必修课. 无论是使用什么编程语音,亦或者是前后端开发,都需要修好<数据结构与算法>这门课! 在各 ...

  5. Fast Möbius Transform 学习笔记 | FMT

    小 Tips:在计算机语言中 \(\cap\) = & / and, \(\cup\) = | / or First. 定义 定义长度为 \(2^n\) 的序列的 and 卷积 \(A = B ...

  6. JUC并发编程学习笔记(十八)深入理解CAS

    深入理解CAS 什么是CAS 为什么要学CAS:大厂你必须深入研究底层!有所突破! java层面的cas------->compareAndSet compareAndSet(int expec ...

  7. 茴香豆 RAG 平台实操-书生浦语大模型实战营第二期第3节作业

    书生浦语大模型实战营第二期第3节作业 本页面包括实战营第二期第三节作业的全部操作步骤.如果需要知道RAG相关知识请访问学习笔记. 作业要求 基础作业 在茴香豆 Web 版中创建自己领域的知识问答助手 ...

  8. 虚拟服务器VirtualBox不要太好用

    在工作和学习前端的路上遇到过太多的坑,就是跳进坑里了,还要勇敢的爬起来. 本章真的想真心实意的推荐一下,超好用的虚拟服务器.你还在纠结window环境和Mac本的区别吗?是不是上班用的window电脑 ...

  9. 使用c#强大的表达式树实现对象的深克隆

    一.表达式树的基本概念 表达式树是一个以树状结构表示的表达式,其中每个节点都代表表达式的一部分.例如,一个算术表达式 a + b 可以被表示为一个树,其中根节点是加法运算符,它的两个子节点分别是 a ...

  10. Django RESTful API设计与实践指南

    title: Django RESTful API设计与实践指南 date: 2024/5/14 15:37:45 updated: 2024/5/14 15:37:45 categories: 后端 ...