如何将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
相关产品推荐
相关产品推荐

