【问题标题】:Format milliseconds to simpledate format将毫秒格式化为 simpledateformat
【发布时间】:2011-09-26 06:59:06
【问题描述】:

在将毫秒格式化为 SimpleDate 格式时,我遇到了一个奇怪的结果:

输出是:

    Start date time: 11/06/30 09:45:48:970
    End date time: 11/06/30 09:45:52:831
    Execution time: 01:00:03:861

脚本:

    long dateTimeStart = System.currentTimeMillis();    
    // some script execution here
    long dateTimeEnd = System.currentTimeMillis();

    "Start date time: " + GlobalUtilities.getDate(dateTimeStart, "yy/MM/dd hh:mm:ss:SSS"); 
    "End date time: " + GlobalUtilities.getDate(dateTimeEnd, "yy/MM/dd hh:mm:ss:SSS"); 
    "Execution time: " + GlobalUtilities.getDate((dateTimeEnd - dateTimeStart), "hh:mm:ss:SSS");

方法:

    public static String getDate(long milliseconds, String format)
    {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(milliseconds);
    }

知道为什么执行时间值如此偏离吗?它应该是 00:00:03:861,而不是 01:00:03:861

谢谢

【问题讨论】:

    标签: java date time simpledateformat


    【解决方案1】:

    因为您将时差转换为日期。 详细地说,这正是它发生的情况:

    1. SimpleDateFormat.format(long milliseconds) 计算日期:Unix Birth Time + 毫秒。
    2. 此时间也根据与 GMT 的时差进行调整。
    3. 有了这两个信息,你会得到奇怪的结果。要验证上述信息,您可以在日期中添加日、月和年。

    很遗憾,您可以通过手动转换时间来修复它。

    【讨论】:

      【解决方案2】:

      执行时间已关闭,因为 Date 构造函数需要很长时间来指定自 1970-01-01 以来的毫秒数。

      【讨论】:

      • 这是另一个 stackoverflow 答案,其中包含一些非常好的想法! stackoverflow.com/questions/625433/…
      • 另外,作为一个旁注,在 Java 中处理日期时,我真的可以推荐 JodaTime API。它确实比内置的 Java Dates 好得多。 joda-time.sourceforge.net
      • 如果你坚持使用日期格式化程序,试试这个(插入你的 x 值): Calendar cal = Calendar.getInstance(); cal.clear(); cal.set(日历.MILLISECOND, x); SimpleDateFormat sdf2 = new SimpleDateFormat("hh:mm:ss.SSS"); System.out.println(sdf2.format(cal.getTime()));
      • 然后将日期转换为 SimpleDateFormat 中的日历。日历还考虑了时区和夏令时,所以我想这就是为什么你可以休息 1 小时(如果你在欧洲某个地方工作)
      • 感谢 Daniel 提供的链接
      猜你喜欢
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      • 1970-01-01
      • 2017-12-24
      • 2011-10-20
      • 1970-01-01
      相关资源
      最近更新 更多