【问题标题】:Java: SimpleDateFormat adds 1 to day and hour (Time span)Java:SimpleDateFormat 将 1 加到天和小时(时间跨度)
【发布时间】:2012-09-29 20:31:21
【问题描述】:

我正在尝试以“天:小时:分钟:秒”的格式输出“900,000 毫秒”,我现在正在使用此代码:

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd:HH:mm:ss");
String formatted = simpleDateFormat.format(900000)

900,000 毫秒应该是 15 分钟,所以我希望它返回

00:00:15:00

或者类似的...

但无论出于何种原因,它都会返回

01:01:15:00

谁能告诉我为什么以及如何解决它?

我认为它必须与时区有关,但它也将天数加了 1...?

提前致谢!

【问题讨论】:

  • 我不认为你可以使用 dd 表示 DAYS,因为 d 是一个月中的某一天
  • d 而不是 dd 给我 1 而不是 01,但不幸的是不是 0 :(

标签: java time format simpledateformat timespan


【解决方案1】:

Day 是 01,因为它代表 1 月 1 日。 01 小时可能与您的时区有关。 试试这个:

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd:HH:mm:ss");    
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
String formatted = simpleDateFormat.format(900000);

【讨论】:

  • 非常感谢,这解决了我的时间问题! :) 知道如何确定天数吗?
【解决方案2】:

使用SimpleDateFormat你错了

SimpleDateFormat 用于获取不计算时间的 DATE 实例

你应该使用TimeUnit

这是一个例子

 public static void main(String[] args) throws Exception {
        long millis = 900000;

        String s = String.format("%d min, %d sec",
                TimeUnit.MILLISECONDS.toMinutes(millis),
                TimeUnit.MILLISECONDS.toSeconds(millis)
                - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));

        System.out.println(s);


    }

这会得到你

15 min, 0 sec

根据您的喜好设置格式并添加日期和时间...

【讨论】:

    【解决方案3】:

    传递给 SimpleDateFormat 的值 900,000 是一个时间点... 1970 年 1 月 1 日 00:00:00 GMT 过去 15 分钟或:

    格林威治标准时间 1970 年 1 月 1 日 00:15:00

    在您所在时区的 1970 年这个日期和时间,日为 1,小时为 1。

    【讨论】:

      【解决方案4】:

      答案是正确的。 SimpleDate.format(900000) 语句格式化过去 900000 毫秒的时间,即第一个小时的 15 分钟

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-17
        • 1970-01-01
        • 2018-08-17
        • 1970-01-01
        相关资源
        最近更新 更多