我想將這種格式的「HH:mm:ss」(例如從5秒到00:00:05)轉換成秒/毫秒, 。我試圖讓這種方式這種格式:如何轉換格式爲「HH:mm:ss」的秒數
int millis = 5000;
SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
String time = df.format(millis);
這樣一來,我得到「1點00分05秒」,而不是「00:00:05」。我錯在哪裏?
我想將這種格式的「HH:mm:ss」(例如從5秒到00:00:05)轉換成秒/毫秒, 。我試圖讓這種方式這種格式:如何轉換格式爲「HH:mm:ss」的秒數
int millis = 5000;
SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");
String time = df.format(millis);
這樣一來,我得到「1點00分05秒」,而不是「00:00:05」。我錯在哪裏?
時區。
長值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();
(我猜嚴格地說,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 = [email protected]
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
所以你可以看到我的默認時區是GB
,其中有1個小時,從格林尼治時間偏移時間由5000L
表示。將時區設置爲GMT gievs的預期輸出爲00:00:05
。
你確定這是與時區相關的嗎?我在GMT時區,並在上面的代碼中調用'df.getTimeZone()'返回'id =「Europe/London」',我得到相同的輸出「01:00:05」。 – 2012-02-09 16:51:58
沒錯,倫敦在格林威治標準時間提前1小時(根據Java至少)。查看我編輯的工作示例。 – 2012-02-09 18:21:07
這是工作。我添加了這個'df.setTimeZone(TimeZone.getTimeZone(「GMT」));' – Webman 2012-02-10 09:44:42
我得到了這個工作。請讓我知道這對你有沒有用。好像很多線路做一些看似簡單的..
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);
public class HHMMSS {
final int UUR = 3600;
final int MINUUT = 60;
public void converteerTijd() {
int uren, minuten, seconden, ingave;
System.out.print("Geef een aantal seconden: ");
ingave = Input.readInt();
uren = ingave/UUR;
minuten = (ingave - uren * UUR)/MINUUT;
seconden = ingave - uren * UUR - minuten * MINUUT;
String nU1 = (uren < 10) ? "0" : "";
String nM1 = (minuten < 10) ? "0" : "";
String nS1 = (seconden < 10) ? "0" : "";
System.out.println(nU1 + uren + "-" + nM1 + minuten + "-" + nS1 + seconden);
你應該與區域設置參數得到的SimpleDateFormat。
public static String getDateFromMillis(long millis) {
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss", Locale.getDefault());
return formatter.format(new Date(millis));
}
好!謝謝。 – t0m 2016-07-14 12:11:19
您不需要每次都創建一個新日期。 formatter.format(米利斯);也將起作用。 – 2017-10-11 09:12:03
爪哇9答案:
Duration dur = Duration.ofMillis(millis);
System.out.println(String.format("%02d:%02d:%02d",
dur.toHours(), dur.toMinutesPart(), dur.toSecondsPart()));
(尚未測試)
的toXxPart
方法在the API docs for Java 9說明。
我寫了一個簡單的效用函數完成這個任務,它不需要任何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 % 86400)/3600, (secs % 3600)/60, secs % 60);
}
不像這裏介紹一些其他的解決方案,這甚至可以處理多達100個小時
可能重複的[如何將毫秒轉換爲「X分鐘,在Java中X秒」](http://stackoverflow.com/questions/625433/how-to-convert-milliseconds-to-x-mins-x-秒在Java) – 2014-03-04 15:57:27
此問題有更好的答案[這裏](http://stackoverflow.com/a/625624/685806)和[這裏](http://stackoverflow.com/a/266970/685806)。 – Pino 2012-05-11 14:33:54
[如何將時間以秒爲單位轉換爲MySQL中的HH:MM:SS格式?](http://stackoverflow.com/questions/18911455/how-to-convert-time-in-seconds-to-hhmmss -format-in-mysql) – 2015-01-13 09:15:37