HOWTO · Java
String in Zeitstempel konvertieren in Java
Es werden vier Methoden vorgestellt, um eine Zeichenkette in Java in einen Zeitstempel umzuwandeln
Auf dieser Seite
Ein java.sql.Timestamp stellt Datum und Uhrzeit mit Bruchteilssekundenpräzision dar und wird häufig mit JDBC verwendet. Wählen Sie den Parser passend zum Eingabeformat: Timestamp.valueOf() für ein Datum mit Uhrzeit im SQL-Format, DateTimeFormatter für ein benutzerdefiniertes Datum-Uhrzeit-Format oder LocalDate, wenn die Eingabe nur ein Datum enthält. Diese Konvertierungen können keine Zeitzone ermitteln, die in der Eingabe nicht angegeben ist.
Timestamp.valueOf() für eine standardisierte Datums- und Uhrzeitzeichenfolge verwenden
Für eine Zeichenfolge wie 2024-06-15 14:30:00 verarbeitet Timestamp.valueOf(String) das SQL-Zeitstempelformat direkt. Die API akzeptiert einen JDBC-Zeitstempel im Escape-Format, auch mit optionalen Bruchteilen einer Sekunde; sie ist nicht auf das hier gezeigte Format mit ganzen Sekunden beschränkt. Verwenden Sie einen anderen Parser, wenn Ihre Eingabe eine andere Reihenfolge oder andere Trennzeichen hat.
Führen Sie dieses Beispiel aus:
import java.sql.Timestamp;
public class StringToTimestamp {
public static void main(String[] args) {
String input = "2024-06-15 14:30:00";
Timestamp timestamp = Timestamp.valueOf(input);
System.out.println(timestamp);
}
}
2024-06-15 14:30:00.0
Der ausgegebene Wert .0 ist der Anteil der Bruchteile einer Sekunde. Einen fehlerhaften Wert weist die API zurück. Prüfen Sie externe Eingaben und behandeln Sie den Parsing-Fehler an der Eingangsgrenze Ihrer Anwendung.
Eine benutzerdefinierte Datums- und Uhrzeitzeichenfolge mit DateTimeFormatter parsen
Wenn ein Wert einem Muster wie 15/06/2024 14:30:00 folgt, parsen Sie ihn mit DateTimeFormatter zu einem LocalDateTime und übergeben Sie dieses Objekt anschließend an Timestamp.valueOf(LocalDateTime). Das Muster muss zur Eingabe passen: dd/MM/uuuu steht für Tag, Monat und Jahr, während HH:mm:ss eine 24-Stunden-Uhr verwendet. LocalDateTime enthält bewusst weder Offset noch Zeitzone. Dieser Weg übernimmt daher die lokalen Datums- und Uhrzeitfelder, bestimmt aber keinen eindeutigen Zeitpunkt.
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class CustomTimestamp {
public static void main(String[] args) {
String input = "15/06/2024 14:30:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/uuuu HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.parse(input, formatter);
Timestamp timestamp = Timestamp.valueOf(localDateTime);
}
}
Ein geparstes Datum mit SimpleDateFormat in Timestamp umwandeln
Für älteren Code, der auf java.util.Date basiert, kann SimpleDateFormat ein benutzerdefiniertes Muster parsen. Das Parsing liefert ein Date; getTime() gibt dessen Wert in Millisekunden seit der Epoch zurück, den der Timestamp-Konstruktor entgegennimmt. Wenn Sie nichts festlegen, verwendet SimpleDateFormat die Standardzeitzone der JVM und parst standardmäßig nachsichtig. Legen Sie beides ausdrücklich fest, wenn eine vorhersehbare Interpretation wichtig ist. Das Beispiel verwendet UTC und deaktiviert das nachsichtige Parsing. Außerdem ist die API veränderlich und nicht threadsicher; verwenden Sie daher nicht dieselbe Instanz gleichzeitig in mehreren Threads.
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
public class LegacyTimestamp {
public static void main(String[] args) throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
formatter.setLenient(false);
Date parsed = formatter.parse("15/06/2024 14:30:00");
Timestamp timestamp = new Timestamp(parsed.getTime());
}
}
Eine reine Datumszeichenfolge mit LocalDate.atStartOfDay() in Timestamp umwandeln
Ein Wert, der nur ein Datum enthält, legt keine Uhrzeit fest. Parsen Sie ihn als LocalDate, wählen Sie mit atStartOfDay() Mitternacht als gewünschte Uhrzeit und wandeln Sie das resultierende LocalDateTime in Timestamp um. So wird die Annahme ausdrücklich gemacht; eine Uhrzeit, die in der Eingabe nicht vorhanden war, bleibt dabei nicht erhalten.
import java.sql.Timestamp;
import java.time.LocalDate;
import java.time.LocalDateTime;
public class DateOnlyTimestamp {
public static void main(String[] args) {
LocalDate date = LocalDate.parse("2024-06-15");
LocalDateTime startOfDay = date.atStartOfDay();
Timestamp timestamp = Timestamp.valueOf(startOfDay);
}
}
Zwischen LocalDateTime und Timestamp wählen
Verwenden Sie LocalDateTime, wenn der Wert ein lokales Kalenderdatum mit Uhrzeit ist und Ihre Anwendung ihm noch keine Zeitzone zuordnen soll. Verwenden Sie Timestamp, wenn eine API wie JDBC java.sql.Timestamp erwartet. Dieser Typ kann Bruchteile einer Sekunde enthalten und stellt über seinen Millisekundenwert einen Zeitpunkt auf der Zeitachse dar. Bei der Umwandlung aus LocalDateTime wird dieser Wert anhand der JVM-Standardzeitzone ermittelt. Daher können dieselben lokalen Datums- und Uhrzeitfelder auf Rechnern mit unterschiedlichen Standardzeitzonen verschiedenen Zeitpunkten entsprechen.
Wenn die Eingabe einen Offset oder eine Zeitzonenregion angibt, parsen und übernehmen Sie diese Information mit einem offsetfähigen oder zonierten java.time-Typ, bevor Sie in einen Zeitpunkt oder einen Datenbanktyp umwandeln. Weder Timestamp.valueOf() noch LocalDateTime kann die beabsichtigte Zeitzone des Absenders ableiten. Auch Datenbankspaltentypen und JDBC-Treiber können eigene Zeitzonenregeln anwenden. Halten Sie deshalb die Annahmen Ihrer Anwendung für Speicherung und Abruf aufeinander abgestimmt.