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)

nr
źródło

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);
ChssPly76
źródło
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". 
user85421
źródło
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).

Brian Agnew
źródło
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
9

Jeśli używasz MySQL i chcesz, aby sama baza danych wykonywała konwersję, użyj tego:

DATE_FORMAT (data, format)

Jeśli wolisz formatować w Javie, użyj tego:

java.text.SimpleDateFormat

SimpleDateFormat dateFormat = new SimpleDateFormat("M/dd/yyyy");
dateFormat.format( new Date() );
DreadPirateShawn
źródło
-9

String timeFrSSHStr = timeFrSSH.toString ();

1909
źródło