摘要:介绍LocalDateTime与时间戳、日期字符串的转换。

需求背景

  服务器部署在不同时区,数据在业务使用过程中,需要进行时区切换,为了不影响数据效果,把各个时区的时间统一为UTC时区。故分享如何实现LocalDateTime与时间戳、日期字符串的转换。

LocalDateTime转字符串

  可以把LocalDateTime转换成指定时区、指定格式的字符串,以UTC时区为例,转换成yyyy-MM-dd HH:mm:ss的实现逻辑如下:

    private static DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
private static ZoneId myZone = TimeZone.getTimeZone("UTC").toZoneId();
private static ZoneId currentZone = OffsetDateTime.now().getOffset();
/**
* 格式化 LocalDateTime 为UTC时区的字符串
*
* @param localTime
* @return utc 时间
* @Date 2023-08-05
**/
public static String getGivenZoneTimeStr(LocalDateTime localTime) {
// System.out.println("转换前的时间:" + localTime.format(df));
LocalDateTime newTime = localTime.atZone(currentZone).withZoneSameInstant(myZone).toLocalDateTime();
return newTime.format(df);
}

  如果把myZone换成其它时区,则可以得到对应时区的时间,诸如GMT+7:00、GMT+8:00等。

LocalDateTime转时间戳

  这篇文章很水,如果不是因为使用如下LocalDateTime转时间戳导致转换失败,也就不发此文了:

    public static long local2Timestamp(LocalDateTime localTime) {
// 设置时区偏移量,这里设置为UTC
long milliSecond = localTime.toInstant(ZoneOffset.UTC).toEpochMilli();
System.out.println("local时间转UTC时间戳:" + milliSecond);
return milliSecond;
}

正确的LocalDateTime转时间戳实现代码如下:

    /**
* UTC时区
*/
private static ZoneId myZone = TimeZone.getTimeZone("UTC").toZoneId();
private static ZoneId currentZone = OffsetDateTime.now().getOffset();
public static long local2TimestampPlus(LocalDateTime localTime) {
LocalDateTime newTime = localTime.atZone(currentZone).withZoneSameInstant(myZone).toLocalDateTime();
return newTime.toInstant(ZoneOffset.UTC).toEpochMilli();
}

时间戳转LocalDateTime

这个就简单了,请各位使用的时候根据需要设置一下时区,我这里使用默认时区验证:

    public static LocalDateTime timestamp2Local(long timestamp) {
return Instant.ofEpochMilli(timestamp).atZone(ZoneId.systemDefault()).toLocalDateTime();
}

时间戳转日期字符串

  Date对象保存的是毫秒数,本身不带时区信息。但是如果调用Date.toString()、Date.parse()等方法把Date展现出来时,就会存在时区的概念,需要进行时区转换,而且不是所有人都只想要UTC时间。

    public static void main(String[] args) {
String result = timestamp2Str(Instant.now().toEpochMilli(), "GMT+7:00");
System.out.println(result);
} public static String timestamp2Str(long timestamp, String timeZoneId) {
Date timeStampDate = new Date(timestamp);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone(timeZoneId));
return sdf.format(timeStampDate);
}

结束语

  文章到这里就结束了,看完之后你有什么想法想要跟大家分享呢?评论区在等着你!

LocalDateTime与时间戳、日期字符串的转换的更多相关文章

  1. Java时间日期字符串格式转换大全

    import java.text.*; import java.util.Calendar; public class VeDate { /** * 获取现在时间 * * @return 返回时间类型 ...

  2. java 日期字符串互相转换

    一.把日期转换成字符串 //获取当前时间  Date date = new Date();   //打印date数据类型  System.out.println(date.getClass().get ...

  3. json里的日期字符串 怎么 转换成 javascript 的 Date 对象?

    “/Date(1232035200000)/” 怎么转换成  javascript 的 Date 对象 做法:new Date(+/\d+/.exec(value)[1]); value就是json字 ...

  4. MFC中 日期字符串的转换

    一.将字符串2011-08-1800:00:00转换为字符串2011-8-18,通过以下的函数 CString DataDeleteZero(CString DATA) { CStringstrmon ...

  5. kotlin --- 时间戳与字符串互相转换

    直接贴代码,清晰易懂.喜欢点个赞 class Timestamp { /** * Timestamp to String * @param Timestamp * @return String */ ...

  6. mysql 日期 字符串 时间戳转换

    #时间转字符串 select date_format(now(), '%Y-%m-%d'); -02-27 #时间转时间戳 select unix_timestamp(now()); #字符串转时间 ...

  7. MySQL日期 字符串 时间戳互转

    平时比较常用的时间.字符串.时间戳之间的互相转换,虽然常用但是几乎每次使用时候都喜欢去搜索一下用法:本文将作为一个笔记,整理一下三者之间的 转换(即:date转字符串.date转时间戳.字符串转dat ...

  8. SQL Server日期时间格式转换字符串详解 (详询请加qq:2085920154)

    在SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的.本文我们主要就介绍一下SQL Server日 ...

  9. SQL Server日期时间格式转换字符串

    在SQL Server数据库中,SQL Server日期时间格式转换字符串可以改变SQL Server日期和时间的格式,是每个SQL数据库用户都应该掌握的.本文我们主要就介绍一下SQL Server日 ...

  10. SQL to_char,to_date日期字符串转换问题

    1.转换函数 与date操作关系最大的就是两个转换函数:to_date(),to_char() to_date() 作用将字符类型按一定格式转化为日期类型: 具体用法:to_date('2004-11 ...

随机推荐

  1. JVM堆内存(heap)详解

    JAVA堆内存管理是影响性能主要因素之一.堆内存溢出是JAVA项目非常常见的故障,在解决该问题之前,必须先了解下JAVA堆内存是怎么工作的.先看下JAVA堆内存是如何划分的,如图:Java堆内存又溢出 ...

  2. CSAPP学习笔记——chapter4 处理器体系结构

    CSAPP学习笔记--chapter4 处理器体系结构 这一章相对于其它的章节,是相对来说比较困难的一章:其它章节的一些内容都在计组,计网,操作系统等课程里面已经接触过一些概念,但是有关处理器,我才发 ...

  3. BUUCTF---世上无难事

    1.题目 给出一大串密文,说flag藏在其种并且是32位 2.解题 结合题目所给信息,flag在其中32位,并且语句通顺,想来是移位密码,需要加偏移量Mod的那种,最后数字应该代表了key is XX ...

  4. C#元数据的概念,以及一个使用了lambda表达式的简单例子

    先看一个例子 假设你写了一个 C# 类库 MathUtils.dll: public class Calculator { public int Add(int a, int b) => a + ...

  5. 理解Rust引用及其生命周期标识(下)

    在上一篇文章中,我们围绕 "引用必然存在来源" 这一基本概念,介绍了Rust中引用之间的关系,以及生命周期标记的实际意义.我们首先从最简单的单参数方法入手,通过示例说明了返回引用与 ...

  6. java基础之线程池

    一.线程池:提前创建多个线程存放到集合容器中,其中的线程可以反复使用,减少资源的开销 作用就是:线程执行完一个任务,并不被销毁,而是可以继续执行其他的任务 使用线程池中线程对象的步骤: 1. 创建线程 ...

  7. 🎀Markdown介绍与语法

    简介 Markdown是一种轻量级的标记语言,由John Gruber于2004年创建.它的设计目标是让人们能够使用易读易写的纯文本格式编写文档,并且可以通过工具将其转换为结构化的HTML(超文本标记 ...

  8. DeepSeekV3:写代码很强了

    以前,我是不信AI能最先替代程序员的. DeepSeek的热度虽然在降,但是能力在悄摸的迭代. 在今年2月中旬测试DeepSeekR1的时候,虽然被它的文本处理能力惊艳到,但是当时吐槽过几句它的编程水 ...

  9. 使用PyMuPDF对pdf文件插入文字时 遇到配置本地的字体文件缺仍然使用默认Helvetica字体问题

    背景 昨天收到的新需求,一份文件从其他部门发起,进行一些文字填写后盖章,再到我们部门,我们接收到的是pdf文件,所以需要在pdf文件中进行修改,插入当日日期等文字.但有要求字体必须和原文档字体相同. ...

  10. web自动化:Javascript操作页面元素

    某些特殊情况下,使用selenium的api无法操作页面元素,可以通过js来完成 一.Js定位 js操作中的webelement通过console控制台来进行js定位: WebElement webe ...