You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将long类型日期值2018051822111234L转换为指定格式LocalDateTime?

解决Long类型日期值转指定格式时间的问题

看起来你是把**编码后的日期时间(形如yyyyMMddHHmmssSS的数字)**存成了long类型,想要转成可读性强的时间格式对吧?之前用LocalDate.parse失败的原因主要有两个:一是LocalDate只处理日期部分,不包含时间;二是你用的格式化器和输入的数字格式完全不匹配。

下面是正确的实现步骤,完全贴合你的需求:

步骤1:明确输入格式

你的输入2018051822111234L对应的结构是:

  • 年:2018,月:05,日:18
  • 时:22,分:11,秒:12,毫秒:34
    也就是格式为yyyyMMddHHmmssSS(如果是3位毫秒,比如20180518221112345L,就改成yyyyMMddHHmmssSSS即可)

步骤2:正确的代码实现

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class DateConversion {
    public static void main(String[] args) {
        // 你的long类型日期值
        long dateLong = 2018051822111234L;
        
        // 1. 将long转为字符串,补前导零避免位数不足的问题
        String dateStr = String.format("%016d", dateLong);
        
        // 2. 定义解析用的格式化器,严格匹配输入的数字格式
        DateTimeFormatter parseFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSS");
        
        // 3. 用LocalDateTime解析(它能处理完整的日期+时间,替代只处理日期的LocalDate)
        LocalDateTime dateTime = LocalDateTime.parse(dateStr, parseFormatter);
        
        // 4. 定义输出格式,匹配你想要的"2018 05 18 22:11:12"
        DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy MM dd HH:mm:ss");
        
        // 5. 格式化得到最终结果
        String formattedDate = dateTime.format(outputFormatter);
        
        System.out.println(formattedDate); // 输出:2018 05 18 22:11:12
    }
}

为什么之前的方法失败?

  • 用错了日期类:LocalDate仅表示日期(年/月/日),不包含时/分/秒等时间信息,而你的输入包含完整的时间部分,必须用LocalDateTime来处理。
  • 格式化器不匹配:你使用的yyyy-MM-dd'T'HH:mm:ssZZZZZ是带时区的ISO标准格式,和输入的纯数字日期格式完全不对应,自然会解析失败。

额外注意事项

如果你的long值是毫秒级时间戳(比如从1970-01-01 00:00:00开始的毫秒数),那处理逻辑会不同,需要用Instant.ofEpochMilli(dateLong)转换后再适配时区。但从你的示例值来看,显然是编码后的日期数字,不是时间戳。

内容的提问来源于stack exchange,提问作者DevJam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:31:56