在Java中将一个整数秒转换为hh:mm:ss格式化字符串的正确方法是什么?
例如:
int Seconds = 650
String Time = 00:10:50
现在我正在使用它:
String Time = new SimpleDateFormat("hh:mm:ss").format(new Date((Seconds*1000)));
但这似乎无缘无故地在几个小时内出现,而我猜测它是因为我误用Date
或SimpleDateFormat
,但我'我也缺乏经验知道什么是错的。或者只有一个内置的系统,我不知道。
答案 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 library
已interval
,因此您可以使用它。请查看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);