Java时间戳转换踩坑实录:为什么LocalDateTime总是1970年?

时间戳转换LocalDateTime输出为1970-01-01T00:00:00Z 我解决Jackson时间戳转换为LocalDateTime,好不容易解决了报错,但是却发现控制台中输出的时间是与我想要的时间,差距过大。 这是我的代码 时间戳转换为当前时间,当是秒的时候。 这是毫秒的时间戳转换 可以发现当我们单位是毫秒的时候都输出的纪元参考点是解决办法 时间戳这里乘以1000就可以了... 阅读详情

Java时间戳转换踩坑实录:为什么LocalDateTime总是1970年?

你有没有在调试Java程序时,满怀期待地打印一个时间戳转换结果,屏幕上却赫然显示着1970-01-01T00:00:00Z?那一刻的困惑,就像精心准备的蛋糕打开后却发现里面是块砖头。这个问题看似简单,却让无数Java开发者,从新手到老手,都曾在此“翻车”。它不仅仅是代码写错那么简单,背后牵扯到计算机对时间的理解、不同API的设计哲学,以及我们日常开发中容易忽略的“单位”陷阱。今天,我们就来彻底拆解这个经典的“1970年”谜题,让你不仅知其然,更知其所以然,从此告别时间转换的玄学问题。

1. 时间戳的“原点”与“单位”:理解问题的根源

要搞清楚为什么会出现1970年,我们得先回到计算机记录时间的起点。在计算机科学里,时间戳通常指的是一个特定的时刻到某个固定起点所经过的时间长度。这个起点,就是大名鼎鼎的 Unix 纪元(Unix Epoch):1970年1月1日 00:00:00 UTC。

注意:UTC(协调世界时)是国际标准时间,与我们常用的北京时间(东八区)有8小时的时差。

当我们说一个时间戳是 0 时,它代表的就是这个纪元时刻。所以,如果你转换一个很小的正数时间戳(比如 1, 10, 1000),得到的日期时间自然就在1970年1月1日附近徘徊。这听起来很合理,但问题在于,这个“长度”是用什么单位来度量的?

这才是导致 LocalDateTime 显示为1970年的核心矛盾。时间戳主要有两种单位:

单位描述示例(表示1秒后)常见来源
秒(Second)从纪元开始计算的秒数时间戳 1许多系统API(如Linux time())、部分数据库、某些API接口
毫秒(Millisecond)从纪元开始计算的毫秒数时间戳 1000Java System.currentTimeMillis()、JavaScript Date.now()、Jackson默认反序列化

想象一下,你拿到一个时间戳 1633046400。如果你把它当成毫秒数传给 Instant.ofEpochMilli(),计算机会认为这是从1970年开始只过了大约 1633046400 毫秒。我们来算一下: 1633046400 毫秒 / 1000 / 3600 / 24 ≈ 18.9 天。所以转换出来的日期就是 1970年1月19日 左右。这显然不是我们想要的2021年10月1日。而实际上,1633046400 是一个以秒为单位的时间戳,它代表的是2021年10月1日 00:00:00 UTC。当你错误地以毫秒去解析它时,得到1970年的结果也就不足为奇了。

2. 实战排查:从Jackson反序列化到控制台输出

让我们还原一个典型的开发场景。你正在处理一个JSON API响应,其中有一个字段是时间戳。你使用Jackson库进行反序列化,并希望将其映射为更易读的 LocalDateTime 对象。

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import java.io.IOException;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;

public class TimestampDeserializer extends JsonDeserializer<LocalDateTime> {
    @Override
    public LocalDateTime deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException {
        Long timestamp = jsonParser.getLongValue(); // 关键点:这里拿到的是什么单位?
        System.out.println("原始时间戳值: " + timestamp);
        // 假设时间戳单位是毫秒(但可能错了)
        LocalDateTime result = Instant.ofEpochMilli(timestamp)
                                      .atZone(ZoneOffset.ofHours(8))
                                      .toLocalDateTime();
        System.out.println("转换后LocalDateTime: " + result);
        return result;
    }
}

当你运行代码,发现输出是 1970-01-01T00:00:00 或附近日期时,第一步不是盲目地去乘以1000,而是诊断。你需要像侦探一样,收集以下信息:

  1. 打印原始时间戳值:这是最重要的线索。看看这个数字有多大。
  2. 与当前时间对比:快速心算或写个简单程序,将当前时间转换为秒和毫秒时间戳,与你得到的数字比较。
    // 获取当前时间的两种时间戳
    long currentMillis = System.currentTimeMillis();
    long currentSeconds = currentMillis / 1000;
    System.out.println("当前毫秒时间戳: " + currentMillis);
    System.out.println("当前秒时间戳: " + currentSeconds);
    
  3. 检查数据来源文档:这个时间戳是来自哪个系统、哪个接口?它的文档是否明确了时间戳的单位?

例如,你打印出的时间戳是 1633046400,而当前毫秒时间戳是 1633046400000 量级(多了三个零)。那么几乎可以断定,你拿到的是秒为单位的时间戳,却错误地使用了 ofEpochMilli 方法。

3. 正确的转换姿势:Instant、Zone与LocalDateTime的协作

Java 8引入的日期时间API(java.time包)设计精良,但使用时要明确每个类的职责。解决转换问题的关键在于选对正确的“工厂方法”。

  • Instant:代表时间线上的一个瞬时点,与纪元偏移量直接相关。它是解决时间戳转换的核心入口。
  • ZoneId/ZoneOffset:代表时区或区域偏移。用于将 Instant 转换为某个特定地区的时间。
  • LocalDateTime:不带时区信息的日期时间,它表示一个本地时间,需要从带时区的对象(如ZonedDateTime)转换而来。

针对不同单位时间戳的正确转换代码:

// 假设 timestamp 是从某处获取的长整型值

// 情况1:时间戳单位是 **毫秒** (如 System.currentTimeMillis())
Instant instantFromMillis = Instant.ofEpochMilli(timestamp);
LocalDateTime localDateTimeFromMillis = instantFromMillis
        .atZone(ZoneId.of("Asia/Shanghai")) // 或 ZoneOffset.ofHours(8)
        .toLocalDateTime();

// 情况2:时间戳单位是 **秒** (如 Unix timestamp)
Instant instantFromSeconds = Instant.ofEpochSecond(timestamp);
LocalDateTime localDateTimeFromSeconds = instantFromSeconds
        .atZone(ZoneId.systemDefault()) // 使用系统默认时区
        .toLocalDateTime();

// 情况3:时间戳单位是秒,但带有毫秒部分(小数秒)。这种情况较少,但API支持。
// 例如 timestamp = 1633046400L, nanoAdjustment = 500_000_000 (表示0.5秒)
Instant instantFromSecondWithNano = Instant.ofEpochSecond(timestamp, 500_000_000);

提示:优先使用 ZoneId.of("区域/城市")(如 "Asia/Shanghai")而非简单的 ZoneOffset,因为它能更好地处理夏令时等复杂情况。

一个常见的误区是直接对时间戳进行乘除运算,比如 timestamp * 1000。这虽然有时能“蒙对”,但不是一个健壮的解决方案。你应该首先确定时间戳的单位,然后使用对应的方法(ofEpochMilli 或 ofEpochSecond)。如果数据来源不稳定,可以在代码中添加逻辑判断:

public LocalDateTime safeConvertTimestamp(Long timestamp) {
    Instant instant;
    // 一个简单的启发式判断:如果数字很小(比如小于100000),可能是秒?但更可靠的是看数据源。
    // 假设我们已知当前时间戳范围。例如,如果timestamp小于10^10,很可能是秒。
    if (timestamp < 10_000_000_000L) {
        // 可能是秒级时间戳
        instant = Instant.ofEpochSecond(timestamp);
    } else {
        // 可能是毫秒级时间戳
        instant = Instant.ofEpochMilli(timestamp);
    }
    return instant.atZone(ZoneId.systemDefault()).toLocalDateTime();
}
// 注意:这个方法只是示例,真正的判断逻辑应基于你对数据源的了解。

4. 进阶:在Spring Boot与Jackson中优雅处理时间戳

在实际的Web开发中,我们很少直接手动解析JSON。通常借助Spring Boot和Jackson的自动映射功能。这里有几个配置和技巧,可以让你一劳永逸地避免1970年问题。

方案一:全局配置Jackson,将时间戳统一视为毫秒(或秒)

在 application.yml 或 application.properties 中:

spring:
  jackson:
    deserialization:
      # 将数字类型的时间戳读为 JAVA_8日期时间API对象时,默认使用毫秒单位
      READ_DATE_TIMESTAMPS_AS_NANOSECONDS: false

这个配置告诉Jackson,当反序列化到 java.time 类型时,将数字解释为毫秒。如果后端接口返回的一直是毫秒时间戳,这个配置就足够了。

方案二:为特定字段使用自定义反序列化器

如果不同接口的时间戳单位不一致,或者你想有更明确的控制,可以为实体类的字段指定自定义的反序列化器。

  1. 定义一个通用的、支持多单位的时间戳反序列化器(更健壮的版本):
    import com.fasterxml.jackson.core.JsonParser;
    import com.fasterxml.jackson.databind.DeserializationContext;
    import com.fasterxml.jackson.databind.JsonDeserializer;
    import java.io.IOException;
    import java.time.Instant;
    import java.time.LocalDateTime;
    import java.time.ZoneId;
    
    public class FlexibleTimestampDeserializer extends JsonDeserializer<LocalDateTime> {
        @Override
        public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
            long timestamp = p.getLongValue();
            Instant instant;
            // 这里可以根据业务规则判断单位,例如通过注解传递参数
            // 此处假设长度小于 10^10 为秒,否则为毫秒(仅作示例,需按实际情况调整)
            if (String.valueOf(timestamp).length() <= 10) { // 秒级时间戳通常为10位数字
                instant = Instant.ofEpochSecond(timestamp);
            } else {
                instant = Instant.ofEpochMilli(timestamp);
            }
            return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
        }
    }
    
  2. 在实体类字段上应用它:
    import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
    import java.time.LocalDateTime;
    
    public class MyEntity {
        private Long id;
        private String name;
    
        @JsonDeserialize(using = FlexibleTimestampDeserializer.class)
        private LocalDateTime eventTime;
    
        // getters and setters
    }
    

方案三:使用标准的日期时间字符串格式

最根本的解决方案是,在系统设计时,前后端约定使用 ISO-8601 字符串格式(如 "2023-10-27T10:30:00+08:00")来传递时间,而非时间戳。这样完全避免了单位的歧义。Jackson可以自动序列化和反序列化这种字符串到 LocalDateTime 或 ZonedDateTime。

在实体类中,你可以直接使用:

public class MyEntity {
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime createTime;
}

这样,无论JSON中是字符串 "2023-10-27 14:30:00",还是数字时间戳(需配合正确配置),Jackson都能正确转换。

5. 调试技巧与最佳实践总结

当时间转换出现问题时,一套系统的调试方法能帮你快速定位。

调试清单:

  1. 隔离问题:写一个最简单的测试方法,硬编码那个出问题的时间戳,单独测试转换逻辑。
  2. 验证输入:确保你拿到的时间戳值是你所期望的。在反序列化代码的第一行打印它。
  3. 单位判断:将你拿到的时间戳与当前时间戳对比。在浏览器中打开一个“在线时间戳转换”工具,分别用秒和毫秒单位转换你的值,看哪个结果符合预期。
  4. 查阅文档:永远不要猜测第三方API返回的时间戳单位。仔细阅读其官方文档。
  5. 时区确认:检查你的转换代码是否使用了正确的时区。1970-01-01T00:00:00Z 中的 Z 表示UTC时间。如果你在北京时间下看到这个,说明转换可能根本没发生(时间戳值太小),或者时区设置有问题。

最佳实践:

  • 明确约定:在团队内部和跨系统接口中,明确约定时间戳的单位(强烈建议使用毫秒)或直接使用ISO-8601字符串。
  • 使用 java.time:坚决弃用老旧的 Date 和 Calendar,拥抱 Instant, LocalDateTime, ZonedDateTime。
  • 时区敏感:在处理任何日期时间时,心中都要有时区概念。存储和传输时,优先使用UTC时间(Instant),在展示时再转换为本地时间。
  • 单元测试:为时间转换代码编写单元测试,覆盖秒、毫秒、边界值(如0、负数时间戳)等案例。

最后,记住这个“1970年”问题本质上是一个数据语义误解。计算机忠实地执行了你的指令,只是你对指令输入的理解有偏差。下次再遇到时,先别急着改代码,停下来问问自己:“这个数字,到底代表多少毫秒,还是多少秒?” 搞清楚这一点,问题就解决了一大半。在我的项目经历中,曾因为一个第三方服务突然将返回的时间戳从毫秒改为秒(还未通知),导致监控图表上一夜之间全是1970年的数据,警报响个不停。从那以后,所有时间戳字段的对接文档里,单位都成了加粗标红的必填项。

Java时间戳转日期踩坑实录:为什么你的SimpleDateFormat总是返回1970年? 本文深入解析Java中时间戳转日期时常见的1970年问题,揭示其根源在于Unix纪元时间和时间戳单位差异。通过对比毫秒级与秒级时间戳的处理方式,提供SimpleDateFormat的正确使用方法和现代Java时间API的最佳实践,帮助开发者避免常见陷阱并实现精准转换。 阅读详情

相关推荐

Java中Date与LocalDate、LocalDateTime之间的区别及相互转换

Java中Date与LocalDate、LocalDateTime之间的区别及相互转换

小李同学的博客 8595

Jackson时间戳转换踩坑实录:为什么我的LocalDateTime总是1970年?

本文深入解析Jackson框架中时间戳转换的常见问题,特别是秒级与毫秒级时间戳混淆导致的LocalDateTime显示为1970年的问题。通过实战案例和代码示例,详细介绍了时间戳的本质、Jackson处理机制、时区影响及解决方案,帮助开发者避免时间转换陷阱。

weixin_28742653的博客 327

Linux DRM驱动实战:手把手教你用drmModeSetCrtc显示纯色画面(附完整代码)

本文提供了一份完整的Linux DRM驱动实战指南,手把手教你使用drmModeSetCrtc在屏幕上显示纯色画面。文章详细解析了从打开设备、获取资源、创建帧缓冲区到最终提交画面的完整调用流程,并附带了可直接编译运行的完整代码示例,帮助开发者快速上手Linux图形底层开发。

weixin_29216353的博客 513

Java日期时间使用

一、JDK8之前 1. java.lang.System类 System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0 秒之间以毫秒为单位的时间差。 此方法适于计算时间差 @Test public void Test1(){ //system类中的 long time = System.currentTimeMillis(); S.

m0_51021692的博客 989

layui 监听单元格点击事件,获取当前点击单元格的内容以及 所在的表头内容

特别是后台的一些管理系统中 业务中还是会碰见这样的需求呢 如果你的后台使用layui写的话 在表格中 layui 也给我们提供了监听单元格的事件 但是好像不能直接获取到单元格内容个 和 对应的表头 其实 还是可以解决 换个角度使劲就会发现新的世界 不是吗 event: 'username' 在每个表头中加一个 event 属性 这样就可以监听表头事件 记住个 event 和 当前列的字段最好保持一样 table.render({ e...

业余前端的职业经历 1万+

springcloud教程 -- 1.快速搭建入门级demo,看这一篇就够了

废话不多讲,跟紧我,开启你的SpringCloud初体验 首先回顾微服务的基本组成: [图片 here] 生产者:提供服务 消费者:消费服务 服务注册/发现中心:服务注册,发现,监控 所以,首先明白springcloud微服务的架构基础:生产者(client),消费者(client),服务注册/发现中心(server)

叶巨岩的博客 8万+

【无标题】

实例可能会保持为默认值(通常是 Java 8 日期时间类的原点,即 Unix 纪元时间,即 1970-01-01T00:00:00Z)。但是,由于时区问题(如果你的环境默认时区为东八区),显示时可能会调整为 1970-01-01T08:00。注解是专门用于将 String 类型的请求参数(如通过 URL 的查询参数或表单数据发送的)转换为 Java 的日期/时间类型(如。时,你依赖的是你的 JSON 库(如 Jackson)的默认行为或你可能已配置的自定义序列化/反序列化器。将 JSON 数组(如。

hijamesk的博客 1065

Win11实时字幕还能这么玩?手把手教你打造专属‘AI字幕机’,告别视频网站无字幕困扰

本文详细介绍了如何利用Win11的实时字幕功能打造全平台通用的AI字幕系统。通过C#抓取程序、Node.js中转服务和前端展示界面的组合,实现自动抓取系统字幕并实时推送到任意网页视频的方案,有效解决在线视频无字幕的困扰。

weixin_33735077的博客 394

Spring Boot 解析 LocalDateTime 失败?Uniapp 传输时间变 1970 的原因与解决方案

具体逻辑是通过前端展示给用户看,后续将其数值带到后端,进行添加,最后以LocalDateTime格式 但发现数据一直都是1970

码农研究僧的博客 1864

‌NTRU算法详细教程 | 2025年最新版(基于NIST后量子密码标准更新)

‌:NTRU是当前抗量子加密的黄金标准,‌。

blns_yxl的博客 1804

SPV1050低功耗微功率太阳能充电管理模块原理图设计,已量产

在物联网应用快速普及的今天,户外低功耗传感器(如土壤温湿度、环境光照、无线节点等)的供电始终是行业痛点 —— 传统锂电池不仅需要定期更换,维护成本高,还难以满足 “终身免维护” 的场景需求。为此,我们设计了一款专为 1V~3V 低电压小型太阳能板优化的微功率太阳能电源管理模块,结合 USB 备用充电路径,实现了低功耗传感器的长期自主供电。

不脱发的程序猿 449

PHP 预输出 datetime-local 函数date()之1970问题

1. 问题简介 最近开始写一个数据管理系统,用的是PHP和MYSQL,相信这个大家一定习以为常。 然后呢web应用程序总躲不开提交表单,提交表达以后总要修改吧,修改的时候是不是表单上应该出现原来的数据,假设表单数据全部存在 $data 里面 html语句嵌入PHP???? <input name="time" type="datetime-local" id="time" value="&lt...

weixin_42823019的博客 1474

芒果YOLOv10改进31:特征融合Neck篇:改进特征融合网络 BiFPN 结构,融合更多有效特征

YOLOv10改进:特征融合Neck篇:改进特征融合网络 BiFPN 结构,融合更多有效特征

包括YOLOv5、YOLOv7、YOLOv8等模型改进 685

【Java 时间戳】时间戳转格式变1970问题,已解决

前言 好久不见,打工人们! 原因 最近遇到一个新需求,需要获得时间戳(单位是秒),然后转成一定得时间格式,yyyyMMddHHmmss ,本以为不就是 Ctr + C 和 Ctr +V 就能搞定,结果碰壁了。 明明输入时当前时间(0202年),结果一转换就变成了 1970XXXX,这个时间差异太离谱了,没见过。 源代码: public static String getFormatTimestamp() { // 获取当前时间戳,Java8 新特性 long time

Joker的博客 1万+

10步掌握!跨国企业在MySQL中实现数据主权的秘诀 vs. 传统方法,你选对了吗?

首先,我们要明确“数据主权”这一概念。简单来说,它指的是国家对其境内产生的所有类型的数据拥有绝对控制权。这意味着即使数据被存储在国外服务器上,只要该数据来源于某国,那么该国政府就有权对其进行监管。对于跨国公司来说,这就要求它们必须严格遵循不同国家关于数据保护的规定,如欧盟的GDPR、美国的《云法案》以及中国的《网络安全法》等。

java专栏 714

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

LocalDateTime与时间戳转换

讲道理,不管在什么时区,系统获取当前时间的时间戳都是一样的【因为时间戳指的是自 1970 年1月1日以来的秒数,所以无论在哪个时区,同一时间获取的都是相同时间戳】。例如,时间戳0000000000在UTC时区代表的是1970-01-01 00:00:00。时间戳与时间在线转换:http://shijianchuo.wiicha.com/因此在转时间戳的时候,需要先指定自己是哪个时区的本地时间,再去转时间戳。在东八区时区代表的是1970-01-01 08:00:00。

yzx3105的博客 6660

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Java8 LocalDateTime 相关时间格式转换

Java8 1、LocalDateTime获取时间戳(毫秒/秒)、 2、Date与LocalDateTime互转 3、LocalDateTime与自定义的时间格式的字符串String互转 4、long类型的timestamp与LocalDateTime互转

weixin_40434637的博客 7296

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java 时间戳转换出1970_Java中时间戳的获取和转换的示例分析

日期时间是Java一个重要的数据类型,常见的日期时间格式通常为“yyyy-MM-dd HH:mm:ss”,但是计算机中存储的日期时间并非字符串形式,而是长整型的时间戳。因为字符串又占用空间又难以运算,相比之下,长整型只占用四个字节,普通的加减乘除运算更是不在话下,所以时间戳是最佳的日期时间存储方案。获取时间戳的代码很简单,只需调用System类的currentTimeMillis方法即可,如下所示...

weixin_42363154的博客 3447

Java中Date、Calendar、LocalDate、LocalTime、LocalDateTime时间类的格式化及时间戳的转换

格式化符号对Date、Calendar、LocalDate、LocalTime、LocalDateTime及时间戳均能进行格式化。但不能对LocalDate类进行含有时分秒的进行格式化,因为在LocalDate中只能精确到年月日对时分秒没有进行处理的能力;同样的不能对LocalTime进行含有年月日的格式化符号进行格式化。DateTimeFormatter.ofPattern(),格式化工具只能格式化LocalDate、LocalTime、LocalDateTime和时间戳,对于老的时间类Date、Cal

LiuQQ567的博客 3199

Java8 LocalDateTime 时间戳 Instant ZoneOffset

1.时间戳定义 首先我们要先了解时间戳的定义,Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。 即北京时间要比格林威治时间多8个小时 unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。[1] Unix时间戳(英文为Unix epoch, Un

liushuyul的博客 6209

Java8 时间的各种使用示例 Date转LocalDateTime LocalDateTime转Date 转时间戳

Java8 时间使用 获取当前日期 //2019-06-19 LocalDate nowLocalDate = LocalDate.now(); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); //2019-06-19 String nowString = nowLocalDate.format(...

苏雨丶 4887

【Java 8 新特性】Java LocalDateTime 和 Epoch 互相转换

Java LocalDateTime 和时间戳互相转换1. LocalDateTime 转 Epoch1.1 LocalDateTime 转纪元秒1.2 LocalDateTime 转纪元毫秒2. Epoch 转 LocalDateTime2.1 使用 LocalDateTime.ofEpochSecond() 将 Epoch 转换为 LocalDateTime2.2 使用 Instant 将 Epoch 转换为 LocalDateTime2.3 使用 Timestamp 将 Epoch 转换为 Local

猫巳的博客 1万+

java8 LocalDateTime的使用、LocalDateTime详细讲解、LocalDateTime的坑

创建LocalDateTime、获取年月日时分秒,计算两个日期时差,对日期进行加减、LocalDateTime/LocalDate/LocalTime互转,获取时间戳

weixin_49114503的博客 5372

LocalDate & LocalDateTime互相转换

一、LocalDate 1、获取现在时间 2、LocalDate转String 3、S 二、LocalDateTime

weixin_45103793的博客 3万+

【Java 8 新特性】Java LocalDateTime 和 Instant 互相转换

本页将提供如何在Java LocalDateTime和Instant之间转换。 LocalDateTime表示没有时区的日期时间,如2019-10-25T12:15:30,而Instant是时间线上的一个瞬时点。 我们可以通过以下方式在Java LocalDateTime和Instant之间进行转换。 1. 使用LocalDateTime.toInstant()方法将LocalDateTime转换为Instant。 Instant instant = localDateTime.toInstant(Zone

猫巳的博客 1万+

LocalDateTime与时间戳

因为时间戳指的是自 1970 年 1 月 1 日(00:00:00 UTC/GMT)以来的秒数,所以无论在哪个时区,同一时间获取的都是相同时间戳,可以用于跨时区。但是我们现实生活用到的本地时间是跟时区挂钩的,中国所在的时区是东八区,会比 UTC 时间快 8 个小时。时间戳是从 UTC 时间得来的,所以时间戳与本地时间的相互转换,需要根据时区来转换。

weixin_54227075的博客 6139
上一篇: 实战指南:华为、新华三、锐捷交换机VLAN配置命令对比与避坑技巧
下一篇: 从标准工艺库到时序收敛:一文读懂STA中的.lib文件与PVT分析
android
博客等级 码龄22年 48粉丝 1455原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值