Web*_*man 27 java time android
我想以这种格式转换第二个/毫秒"HH:mm:ss"(对于例子,从5秒到00:00:05).我试图以这种方式获得这种格式:
int millis = 5000;
SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
String time = df.format(millis);
Run Code Online (Sandbox Code Playgroud)
这样,我得到"01:00:05"而不是"00:00:05".我哪里错了?
And*_*yle 21
时区.
长值5000表示在纪元后5秒.对于大多数时区,在纪元后5秒不是当地时间午夜过后5秒.
Java 8更新:
java.time.LocalTime将处理挂钟"时间"的想法,而不必担心时区和隐含的时间java.util.Date.如果您可以使用Java 8,并且您的持续时间总是少于一天,那么您的示例的正确版本可以如下所示:
int millis = 5000;
int seconds = millis / 1000; // Maybe no need to divide if the input is in seconds
LocalTime timeOfDay = LocalTime.ofSecondOfDay(seconds);
String time = timeOfDay.toString();
Run Code Online (Sandbox Code Playgroud)
(我想严格来说,这java.time.Duration是你想要的更好的模型,因为它代表了一定的秒数,而不是一天中的时间.但是格式化为hh:mm:ss是一种痛苦,所以如果你'总是处理24小时以下的值,TimeOfDay免费提供这种格式,并且在其他方面是等效的.)
如果您遇到Java 7或更低版本,那么GMT在示例代码中明确指定时区应该可以为您提供所期望的输出.
这是一个Scala REPL会话,在我的机器上演示了问题和Java 7解决方案:
scala> val millis = 5000
millis: Int = 5000
scala> val df = new java.text.SimpleDateFormat("HH:mm:ss")
df: java.text.SimpleDateFormat = java.text.SimpleDateFormat@8140d380
scala> df.format(millis)
res0: java.lang.String = 01:00:05
scala> df.getTimeZone.getID
res1: java.lang.String = GB
scala> df.getTimeZone.getOffset(millis)
res2: Int = 3600000
scala> df.setTimeZone(java.util.TimeZone.getTimeZone("GMT"))
scala> df.format(millis)
res3: java.lang.String = 00:00:05
Run Code Online (Sandbox Code Playgroud)
因此,您可以看到我的默认时区是GB,在表示的时间与格林威治标准时间相差1小时5000L.将时区设置为GMT gievs的预期输出00:00:05.
小智 13
我得到了这个工作.请让我知道这对你有没有用.似乎很多线路做一些看似简单的事情..
int millis = 5000;
TimeZone tz = TimeZone.getTimeZone("UTC");
SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
df.setTimeZone(tz);
String time = df.format(new Date(millis));
System.out.println(time);
Run Code Online (Sandbox Code Playgroud)
我为此任务编写了一个简单的实用程序函数,它不需要任何Java版本,也不实例化任何不必要的对象:
/**
* provides a String representation of the given time
* @return {@code millis} in hh:mm:ss format
*/
public static final String formatTime(long millis) {
long secs = millis / 1000;
return String.format("%02d:%02d:%02d", secs / 3600, (secs % 3600) / 60, secs % 60);
}
Run Code Online (Sandbox Code Playgroud)
与此处的其他解决方案不同,这甚至可以处理长达100小时
您应该使用Locale参数获取SimpleDateFormat.
public static String getDateFromMillis(long millis) {
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss", Locale.getDefault());
return formatter.format(new Date(millis));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45527 次 |
| 最近记录: |