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

秒级时间差场景下日期格式化工具无法正确生成字符串问题

问题分析与解决:格式化日期时时间差消失的问题

你遇到的这个问题其实是一个非常典型的「参数误用」小bug,我来帮你拆解一下:

问题根源

你看一下getFormattedDate方法的实现——你没有格式化传入的date参数,反而每次都格式化了一个新创建的new Date()!

原方法代码里的这一行是罪魁祸首:

return dateFormat.format(new Date());

因为你两次调用getFormattedDate的时间间隔几乎可以忽略不计,所以两次格式化的都是同一个「当前系统时间」,自然输出的字符串完全相同。而直接打印Date对象时,你输出的是提前计算好的currDate和nextPointDate,所以时间差是对的。

修复方案

只需要把格式化的对象改成传入的date参数即可,修正后的方法如下:

public static String getFormattedDate(Date date, String pattern) {
 DateFormat dateFormat = new SimpleDateFormat(pattern);
 return dateFormat.format(date); // 这里改用传入的date参数
}

修改后再运行你的测试代码,第二行输出就会显示正确的2019-03-19 14:57:50, 2019-03-19 14:58:50了。

额外小建议

如果你的项目使用Java 8及以上版本,更推荐使用线程安全的DateTimeFormatter来替代SimpleDateFormat,避免多线程环境下可能出现的并发问题,示例代码如下:

public static String getFormattedDate(Date date, String pattern) {
    return DateTimeFormatter.ofPattern(pattern)
            .format(date.toInstant().atZone(ZoneId.systemDefault()));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:31:47