java中将日期转时间戳需依类型选择方法:instant用toepochmilli();date用gettime();localdatetime须先atzone()再toinstant();注意毫秒单位、时区明确及新旧api桥接。

在 Java 中,将日期转为时间戳数字(即毫秒数),核心是获取自 1970-01-01 00:00:00 UTC 起经过的毫秒数。不同日期类型对应不同转换方式,关键在于明确你用的是哪种日期对象。
使用 java.time.Instant(推荐,Java 8+)
Instant 是时区无关的时刻点,天然适配时间戳语义:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 从当前时间获取时间戳:
long ts = Instant.now().toEpochMilli(); - 从 LocalDateTime + 时区转换:
long ts = localDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); - 从字符串解析再转:
long ts = LocalDateTime.parse("2024-05-20T14:30:00").atZone(ZoneId.of("Asia/Shanghai")).toInstant().toEpochMilli();
使用 java.util.Date(传统 API,兼容旧代码)
Date 内部也以毫秒存储,直接调用 getTime() 即可:
- 当前时间戳:
long ts = new Date().getTime(); - 从字符串构造(需配合 SimpleDateFormat,注意线程不安全):
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");<br> Date date = sdf.parse("2024-05-20 14:30:00");<br> long ts = date.getTime();
使用 java.time.LocalDateTime(无时区,需显式指定时区)
LocalDateTime 本身不含时区信息,不能直接转时间戳,必须结合时区(如系统默认或指定 ZoneId)才能映射到 UTC 时间线:
- 推荐用系统默认时区:
long ts = localDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); - 指定时区(如东八区):
long ts = localDateTime.atZone(ZoneId.of("Asia/Shanghai")).toInstant().toEpochMilli(); - ⚠️ 错误写法:
localDateTime.atOffset(ZoneOffset.UTC).toInstant()会出错,因为 Offset 和 Zone 概念不同,应优先用atZone。
注意事项与常见误区
- 时间戳单位是毫秒,不是秒;若需秒级时间戳,除以 1000 并转为
long(注意截断)。 - 避免混用旧 API(Date、Calendar)和新 API(LocalDateTime、ZonedDateTime),转换时务必通过
Date.from(Instant)或date.toInstant()桥接。 - 解析字符串时,时区必须明确,否则结果依赖系统默认时区,容易引发线上时间偏差。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










