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

字符串转LocalDateTime后秒数'00'不显示问题求助

问题分析与解决

问题本质

你遇到的不是LocalDateTime对象丢失秒数的问题,而是默认toString()方法的显示规则导致的:当秒数为0时,LocalDateTime的默认字符串输出会省略秒(以及纳秒)部分,但对象内部的秒数值依然是0,并没有丢失。

解决方案

根据你的需求,有两种处理方式:

1. 保留LocalDateTime对象,输出时格式化

如果需要继续存储LocalDateTime类型,只需要在输出/使用列表元素时,用你定义的DateTimeFormatter重新格式化即可:

// 调用方法后,遍历输出时格式化
ArrayList<LocalDateTime> hoursList = calculateHours("2023-09-14T12:00:00", "2023-09-14T14:00:00");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
for (LocalDateTime time : hoursList) {
    System.out.println(time.format(formatter)); // 输出2023-09-14T12:00:00、2023-09-14T13:00:00
}

2. 直接存储格式化后的字符串

如果业务上只需要带完整格式的字符串,可以修改方法,直接将格式化后的字符串存入列表:

public static ArrayList<String> calculateHours(String startTime, String endTime) {
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
    LocalDateTime startDateTime = LocalDateTime.parse(startTime, formatter);
    LocalDateTime endDateTime = LocalDateTime.parse(endTime, formatter);

    long hoursDifference = java.time.Duration.between(startDateTime, endDateTime).toHours();

    ArrayList<String> hoursList = new ArrayList<>();

    for (long i = 0; i < hoursDifference; i++) {
        LocalDateTime currentHour = startDateTime.plusHours(i);
        hoursList.add(currentHour.format(formatter)); // 格式化后存入字符串
    }
    return hoursList;
}

调用这个方法后,列表里的元素就是"2023-09-14T12:00:00"、"2023-09-14T13:00:00"这样的完整格式字符串。

补充说明

你的原始方法中,startDateTime.plusHours(i)生成的LocalDateTime对象确实包含秒数(值为0),只是默认输出被简化了。可以通过currentHour.getSecond()验证,返回值是0,说明秒数并没有丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 06:32:40