Jak sformatować znacznik czasu java.sql do wyświetlania?


103

Jak sformatować znacznik czasu java.sql według własnych upodobań? (do łańcucha, do celów wyświetlania)

Odpowiedzi:


160

java.sql.Timestamprozciąga się java.util.Date. Możesz to zrobić:

String s = new SimpleDateFormat("MM/dd/yyyy").format(myTimestamp);

Lub też czas:

String s = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(myTimestamp);

3
To zadziała, ale uważaj, ponieważ SimpleDateFormat nie jest bezpieczny dla wątków.
Brian Agnew,

17
Małe przypomnienie, że jeśli obiekt SimpleDateFormat jest obiektem o zasięgu lokalnym (jest tworzony i używany tylko wewnątrz metody), to jest bezpieczny wątkowo, ponieważ stos, na którym będzie rezydował, jest z natury „bezpieczny wątkowo” (ponieważ należy do jednego wątku).
Quantum

5
Aby uwzględnić czas, musisz użyć SimpleDateFormat („MM / dd / rrrr gg: mm”) lub czegoś podobnego
AverageMarcus

1
aby był kompletny dla tych, którzy tego potrzebują, String S = new SimpleDateFormat ("MM / dd / rrrr HH: mm: ss"). format (myTimestamp);
Ishan Liyanage

27

Użyj String.format (lub java.util.Formatter ):

Timestamp timestamp = ...
String.format("%1$TD %1$TT", timestamp)

EDYCJA:
zapoznaj się z dokumentacją programu Formatter, aby dowiedzieć się, co oznaczają TD i TT: kliknij java.util.Formatter

Pierwsza litera „T” oznacza:

't', 'T'    date/time   Prefix for date and time conversion characters.

oraz znak następujący po „T”:

'T'     Time formatted for the 24-hour clock as "%tH:%tM:%tS".
'D'     Date formatted as "%tm/%td/%ty". 

1
To według mnie najlepsza odpowiedź. Żaden zbędny obiekt nie jest tworzony tylko do konwersji znacznika czasu na ciąg.
Salil

1
Teraz powinno być jasne, gdzie znaleźć dokumentację i co ona oznacza
użytkownik85421

Bardzo elegancko. Dla jasności wygląda to tak, jak wygląda formatowanie utworzone w tym przykładzie 05/30/17 00:39:18.
Noumenon

@Noumenon dzięki, to był format „do gustu”, jak wymagało pytanie [:-)
użytkownik85421

10

W przypadku tego konkretnego pytania standardowa sugestia java.text.SimpleDateFormatdziała, ale ma niefortunny efekt uboczny, który SimpleDateFormat nie jest bezpieczny dla wątków i może być źródłem szczególnie nieprzyjemnych problemów, ponieważ uszkodzi to wyjście w scenariuszach wielowątkowych, a ty nie uzyskać wyjątki!

Chciałbym gorąco polecić patrząc na Joda do czegoś takiego. Czemu ? Jest to znacznie bogatsza i bardziej intuicyjna biblioteka czasu / daty dla Javy niż obecna biblioteka (i podstawa nadchodzącej nowej standardowej biblioteki daty / czasu Java, więc nauczysz się wkrótce stać się standardem API).


8
Dobre ostrzeżenie. Ale bardzo łatwe do zaadresowania - nie udostępniaj instancji SimpleDateFormat, przechowując je w zakresie sesji / zmiennych instancji / kontekstu statycznego, a następnie uzyskując do nich dostęp z wielu wątków. Po prostu utwórz nową SimpleDateFormat () w swojej metodzie i wyrzuć ją po użyciu. To jest bezpieczne dla wątków.
Glen Best

Oczywiście, jeśli naprawdę chcesz przechowywać / udostępniać instancję SimpleDateFormat, zsynchronizuj access: synchronized (simpleDateFormatInstance) {s = simpleDateFormatInstance.format (myTimeStamp)} LUB utwórz niestandardowe rozszerzenie klasy SDF i zrób to automatycznie w ramach metody format.
Glen Best



Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.