Ich versuche, ein Date
in ein LocalTime
umzuwandeln (ich will nur die Stunden und Minuten des Datums), aber es funktioniert nicht. Ich habe hier zuerst date-to-java-time gesucht und versucht, Date
in zu konvertieren LocalTime
, aber das hat nicht funktioniert, also habe ich versucht, Date
in Calendar
zu konvertieren und dann Calendar
in Date
zu konvertieren, aber das hat auch nicht funktioniert.
Ich denke es liegt daran, dass date
die Zeit in fasttime
statt in cdate
speichert. Aber das ist nur ein Bauchgefühl. Hier ist mein Code:
Ich erhalte keinen Kompilierungsfehler, aber die LocalTime
seiner Stunden sind nicht gesetzt und bleiben 0
.
Ihre Eingabe ist effektiv ein LocalDateTime
. Es wäre viel einfacher, das auf ein LocalDateTime
zu parsen und dann das LocalTime
daraus zu bekommen. Keine Zeitzonen, um die Sie sich sorgen müssen, keine etwas älteren Klassen (vermeiden Sie Date
und Calendar
wo möglich ...)
Das ist auch ganz einfach:
LocalTime time = LocalDateTime.ofInstant(new Date().toInstant(), ZoneId.systemDefault()).toLocalTime()
Die akzeptiert Antwort von Jon Skeet ist korrekt. Diese Antwort erweitert diese Ideen.
Einige der anderen Antworten und die Frage mischen die alten Legacy-Datum-Zeit-Klassen mit den neuen. Das ist unnötig und schlechte Praxis. Der ganze Sinn der java.time Klassen ist < em> ersetzen die lästigen und verwirrenden alten Klassen.
java.util.Date
. java.util.Calendar
. LocalDateTime
In Ihrer Eingabezeichenfolge sind keine Informationen zur Zeitverschiebung von UTC oder Zeitzone enthalten. Also analysieren wir es als LocalDateTime
Objekt.
Um zu analysieren, ersetzen wir den SPACE in der Mitte mit einem T
, um dem Standard ISO 8601 zu entsprechen Datum-Uhrzeit-Formate.
LocalTime
Um sich auf die Tageszeit ohne Datum zu konzentrieren, fragen Sie nach einem LocalTime
.
ZonedDateTime
Beachten Sie, dass dies keine tatsächlichen Momente sind, kein Punkt auf der Timeline. Ohne den Zusammenhang einer UTC-Zeitzone oder einer Zeitzone wissen wir nicht, ob Sie in Auckland NZ 5 Uhr oder in Kalkutta 5 Uhr morgens oder in Paris Frankreich 5 Uhr oder in Montréal Québec 5 Uhr morgens gemeint haben. Jeder von diesen würde sehr unterschiedliche Momente in der Zeit sein.
Wenn Sie die gewünschte Zeitzone im Kontext kennen, wenden Sie sie an. Wenden Sie eine ZoneId
an, um eine ZonedDateTime
.
Von dort nach dem LocalTime
fragen, falls gewünscht.
Instant
Wenn Sie denselben Moment in UTC sehen möchten, extrahieren Sie ein Instant
. Die Klasse Instant
repräsentiert einen Moment auf der Timeline in UTC mit einer Auflösung von Nanosekunden (bis zu neun (9) Ziffern einer Dezimalzahl).
Im Allgemeinen sollten Sie sich bei vielen Ihrer Geschäftslogiken, Protokollierung, Datenspeicherung und Datenaustausch auf UTC konzentrieren. Lernen Sie, UTC als "The One True Time" zu verstehen.
%Vor%Ihre Eingabe ist effektiv ein %code% . Es wäre viel einfacher, das auf ein %code% zu parsen und dann das %code% daraus zu bekommen. Keine Zeitzonen, um die Sie sich sorgen müssen, keine etwas älteren Klassen (vermeiden Sie %code% und %code% wo möglich ...)
%Vor%Das ist auch ganz einfach: %code%
Probieren Sie das
Die akzeptiert Antwort von Jon Skeet ist korrekt. Diese Antwort erweitert diese Ideen.
Einige der anderen Antworten und die Frage mischen die alten Legacy-Datum-Zeit-Klassen mit den neuen. Das ist unnötig und schlechte Praxis. Der ganze Sinn der java.time Klassen ist < em> ersetzen die lästigen und verwirrenden alten Klassen.
In Ihrer Eingabezeichenfolge sind keine Informationen zur Zeitverschiebung von UTC oder Zeitzone enthalten. Also analysieren wir es als %code% Objekt.
>Um zu analysieren, ersetzen wir den SPACE in der Mitte mit einem %code% , um dem Standard ISO 8601 zu entsprechen Datum-Uhrzeit-Formate.
%Vor%Um sich auf die Tageszeit ohne Datum zu konzentrieren, fragen Sie nach einem %code% .
%Vor%Beachten Sie, dass dies keine tatsächlichen Momente sind, kein Punkt auf der Timeline. Ohne den Zusammenhang einer UTC-Zeitzone oder einer Zeitzone wissen wir nicht, ob Sie in Auckland NZ 5 Uhr oder in Kalkutta 5 Uhr morgens oder in Paris Frankreich 5 Uhr oder in Montréal Québec 5 Uhr morgens gemeint haben. Jeder von diesen würde sehr unterschiedliche Momente in der Zeit sein.
Wenn Sie die gewünschte Zeitzone im Kontext kennen, wenden Sie sie an. Wenden Sie eine %code% an, um eine %code% .
%Vor%Von dort nach dem %code% fragen, falls gewünscht.
%Vor%Wenn Sie denselben Moment in UTC sehen möchten, extrahieren Sie ein %code% . Die Klasse %code% repräsentiert einen Moment auf der Timeline in UTC mit einer Auflösung von Nanosekunden (bis zu neun (9) Ziffern einer Dezimalzahl).
Im Allgemeinen sollten Sie sich bei vielen Ihrer Geschäftslogiken, Protokollierung, Datenspeicherung und Datenaustausch auf UTC konzentrieren. Lernen Sie, UTC als "The One True Time" zu verstehen.
%Vor%Ich versuche, ein %code% in ein %code% umzuwandeln (ich will nur die Stunden und Minuten des Datums), aber es funktioniert nicht. Ich habe hier zuerst date-to-java-time gesucht und versucht, %code% in zu konvertieren %code% , aber das hat nicht funktioniert, also habe ich versucht, %code% in %code% zu konvertieren und dann %code% in %code% zu konvertieren, aber das hat auch nicht funktioniert.
Ich denke es liegt daran, dass %code% die Zeit in %code% statt in %code% speichert. Aber das ist nur ein Bauchgefühl. Hier ist mein Code:
%Vor%Ich erhalte keinen Kompilierungsfehler, aber die %code% seiner Stunden sind nicht gesetzt und bleiben %code% .