字符串转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
相关产品推荐
相关产品推荐

