SimpleDateFormat无缘无故地在几小时内解决问题?

时间:2014-09-27 01:46:31

标签: java

在Java中将一个整数秒转换为hh:mm:ss格式化字符串的正确方法是什么?

例如:

int Seconds = 650
String Time = 00:10:50

现在我正在使用它:

String Time = new SimpleDateFormat("hh:mm:ss").format(new Date((Seconds*1000)));

但这似乎无缘无故地在几个小时内出现,而我猜测它是因为我误用DateSimpleDateFormat,但我'我也缺乏经验知道什么是错的。或者只有一个内置的系统,我不知道。

编辑:我应该指出,我知道我可以使用简单的划分来消除小时数,然后剩下的几分钟,然后是剩下的几分钟,并将所有这三个部分修补成一个字符串,但我想知道是否Java有一个烘焙方式来做到这一点。

4 个答案:

答案 0 :(得分:4)

您可以使用java.util.concurrent包中定义的TimeUnit类。

例如,您想要计算小时数:

long hours=TimeUnit.SECONDS.toHours(seconds);

类似的方法可用于计算天,小时,分钟。

但请注意,这会让您直接转换为小时数,因此最终会超过24小时。为了正确实现,您需要首先计算天数,进行必要的数学运算并给出计算小时数的剩余值。最后根据您所需的格式编写一个字符串。

答案 1 :(得分:2)

Date(long date) constructor's JavaDoc

  

分配一个Date对象并对其进行初始化,以表示自标准基准时间以来的指定毫秒数" epoch",即1970年1月1日,00:00:00 GMT 即可。

因此,如果你的JVM没有在GMT时区运行,你就会相应地关闭。

它的设计和逻辑也是如此:

  • new Date()预计将是您当前的当地时间
  • new Date(0)预计将于1970年1月1日00:00:00 GMT +本地偏移= 当地时间
  • new Date(650*1000)预计将于1970年1月1日00:10:50 GMT +本地偏移= 当地时间

答案 2 :(得分:1)

你的代码是正确的。但问题是这给你相对于开始位置的时间。如果你运行以下代码,请加上

String Time = new SimpleDateFormat("EEEE,MMMM d,yyyy hh:mm,a").format(new Date((0)));
System.out.println(Time);
output>>Wednesday,December 31,1969 04:00,PM //this 04 will be reason to your undesired output later

我认为这是正秒的最小时间。当你给出毫秒时,你会发现0给你一天作为星期三和4小时,所以starting hours of java time is not 0.     所以当你跑步     以下代码

String Time = new SimpleDateFormat("hh:mm:ss").format(new Date((Seconds*1000)));

output>> 04:10:50 //you expect 00:10:50
because `starting time+seconds`
04:00:00 + 00:10:50 
but starting minutes and seconds are 0 so you only have problem about hours 

如果您可以减去开始时间,那么您将获得所需的输出。 joda time libraryinterval,因此您可以使用它。请查看this question

答案 3 :(得分:1)

以下列方式尝试,

    int seconds = 650;
    long millis = seconds * 1000;
    String format = String.format("%d:%d:%d",
            TimeUnit.MILLISECONDS.toHours(millis),
            TimeUnit.MILLISECONDS.toMinutes(millis),
            TimeUnit.MILLISECONDS.toSeconds(millis)
            - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis))
    );
    System.out.println(format);