如何为日期时间字符串增加分钟或天数且保持格式不丢失秒位?
问题根因
秒数丢失和时间加算逻辑无关,是ZonedDateTime的toString()方法的内置规则导致的:当时间的秒、毫秒值为0时,该方法会自动省略这两部分的输出。
修复方案
不要直接调用toString()将运算后的时间转为字符串,复用你解析时间时使用的DateTimeFormatter.ISO_OFFSET_DATE_TIME格式化器输出即可,能完全保证和输入格式一致。
修改后的代码如下:
ZonedDateTime result = ZonedDateTime.parse(addTimestamp, DateTimeFormatter.ISO_OFFSET_DATE_TIME); // 使用指定格式化器输出,保留秒字段 String removeTimestamp = result.plusDays(3).format(DateTimeFormatter.ISO_OFFSET_DATE_TIME); System.out.println("addTimestamp: " + addTimestamp); System.out.println("removeTimestamp: " + removeTimestamp);
修改后输出结果为:
addTimestamp: 2021-05-01T00:00:00+02:00 removeTimestamp: 2021-05-04T00:00:00+02:00
如果后续需要自定义输出格式,也可以通过DateTimeFormatter.ofPattern()方法构造符合你要求的格式化器使用。
内容的提问来源于stack exchange,提问作者Jeff
相关产品推荐
相关产品推荐

