Strefy czasowe.
Długa wartość 5000
oznacza 5 sekund po epoce. W przypadku większości stref czasowych, 5 sekund po epoce nie jest 5 sekund po północy czasu lokalnego.
Java 8 aktualizacja:
java.time.LocalTime
zajmie się pomysł na ścianie zegar „Time of Day” bez konieczności martwić o strefach czasowych i dni ukrytych w java.util.Date
. Jeśli można użyć Java 8, a twoja trwania zawsze będzie mniej niż jeden dzień, to poprawna wersja swoim przykładem może być tak proste, jak:
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();
(Chyba ściśle mówiąc, java.time.Duration
jest lepszym modelu z tego, co chcesz, ponieważ reprezentuje pewną liczbę sekund, a nie porę dnia, ale formatowanie to hh: mm: ss, więc jeśli zawsze masz do czynienia z wartościami z okresu poniżej 24 godzin , TimeOfDay daje to formatowanie za darmo, a poza tym jest równoważne.)
Jeśli utkniesz z Java 7 lub niższą, następnie jednoznaczne określenie strefy czasowej GMT
w przykładowym kodzie powinno dać wynik, którego oczekujesz.
Oto sesja Scala REPL wykazując problemu i Java 7 rozwiązanie, na moim komputerze:
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
Więc widzę, że moja domyślna strefa czasowa jest GB
, który ma 1 godzinę przesunięcie GMT na czas oznaczony 5000L
. Ustawienie strefy czasowej na GMT wyświetla oczekiwany wynik 00:00:05
.
możliwy duplikat [Jak konwertować milisekundy na "X mins, x seconds" w Javie?] (Http://stackoverflow.com/questions/625433/how-to-convert-milliseconds-to-x-mins-x- seconds-in-java) –
To pytanie ma lepsze odpowiedzi [tutaj] (http://stackoverflow.com/a/625624/685806) i [tutaj] (http://stackoverflow.com/a/266970/685806). – Pino
możliwy duplikat [Jak przeliczać czas w sekundach na format HH: MM: SS w MySQL?] (Http://stackoverflow.com/questions/18911455/how-to-convert-time-in-seconds-to-hhmmss -format-in-mysql) –