Bagaimana cara memformat cap waktu java.sql untuk ditampilkan?

103

Bagaimana cara saya memformat cap waktu java.sql sesuai keinginan saya? (ke string, untuk tujuan tampilan)

no
sumber

Jawaban:

160

java.sql.Timestampmeluas java.util.Date. Anda dapat melakukan:

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

Atau untuk juga memasukkan waktu:

String s = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(myTimestamp);
ChssPly76
sumber
3
Itu akan berhasil, tetapi berhati-hatilah karena SimpleDateFormat tidak aman untuk thread.
Brian Agnew
17
Sekadar pengingat kecil bahwa jika objek SimpleDateFormat adalah objek berskala lokal (dibuat dan digunakan hanya di dalam metode), maka objek ini aman untuk thread, karena tumpukan tempat ia berada secara inheren "aman untuk thread" (karena milik satu utas).
kuantum
5
Untuk memasukkan waktu, Anda perlu menggunakan SimpleDateFormat ("MM / dd / yyyy hh: mm") atau yang serupa
AverageMarcus
1
untuk membuatnya lengkap bagi yang membutuhkannya, String S = new SimpleDateFormat ("MM / dd / yyyy HH: mm: ss"). format (myTimestamp);
Ishan Liyanage
27

Gunakan String.format (atau java.util.Formatter ):

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

EDIT:
silakan lihat dokumentasi Formatter untuk mengetahui apa arti TD dan TT: klik java.util.Formatter

'T' pertama adalah singkatan dari:

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

dan karakter yang mengikuti 'T' itu:

'T'     Time formatted for the 24-hour clock as "%tH:%tM:%tS".
'D'     Date formatted as "%tm/%td/%ty". 
pengguna85421
sumber
1
Ini jawaban terbaik menurut saya. Tidak ada objek yang berlebihan dibuat hanya untuk mengubah stempel waktu menjadi string.
Salil
1
Sekarang harus jelas di mana menemukan dokumentasi dan apa artinya
user85421
Sangat elegan. Untuk memperjelas, format yang dihasilkan oleh contoh di sini terlihat seperti 05/30/17 00:39:18.
Noumenon
@Noumenon terima kasih, itu adalah format "sesuai dengan keinginan saya" seperti yang diminta oleh pertanyaan [:-)
user85421
10

Untuk pertanyaan khusus ini, saran standar java.text.SimpleDateFormatberfungsi, tetapi memiliki efek samping yang SimpleDateFormat tidak menguntungkan yang tidak aman untuk utas dan dapat menjadi sumber masalah yang sangat buruk karena itu akan merusak keluaran Anda dalam skenario multi-utas, dan Anda tidak akan melakukannya. dapatkan pengecualian!

Saya akan sangat merekomendasikan melihat Joda untuk hal seperti ini. Kenapa? Ini adalah pustaka waktu / tanggal yang jauh lebih kaya dan lebih intuitif untuk Java daripada pustaka saat ini (dan dasar dari pustaka tanggal / waktu Java standar yang baru dan akan datang, jadi Anda akan segera mempelajari pustaka yang akan segera menjadi standar. API).

Brian Agnew
sumber
8
Peringatan yang bagus. Tetapi sangat mudah untuk ditangani - jangan bagikan instance SimpleDateFormat dengan menyimpannya dalam cakupan sesi / variabel instance / konteks statis, lalu mengaksesnya dari beberapa utas. Cukup buat SimpleDateFormat () baru di dalam metode Anda dan buang setelah digunakan. Itu threadsafe.
Glen Best
Tentu saja jika Anda benar-benar ingin menyimpan / berbagi instance SimpleDateFormat, sinkronkan akses: sinkron (simpleDateFormatInstance) {s = simpleDateFormatInstance.format (myTimeStamp)} ATAU buat ekstensi kustom dari kelas SDF, dan lakukan ini secara otomatis dalam metode format.
Glen Best
9

Jika Anda menggunakan MySQL dan ingin database itu sendiri melakukan konversi, gunakan ini:

DATE_FORMAT (tanggal, format)

Jika Anda lebih suka memformat menggunakan Java, gunakan ini:

java.text.SimpleDateFormat

SimpleDateFormat dateFormat = new SimpleDateFormat("M/dd/yyyy");
dateFormat.format( new Date() );
DreadPirateShawn
sumber
2

Gunakan a DateFormat. Dalam aplikasi internasionalisasi, gunakan format yang disediakan oleh getInstance. Jika Anda ingin mengontrol format secara eksplisit, buat SimpleDateFormatsendiri yang baru .

erickson
sumber
-9

String timeFrSSHStr = timeFrSSH.toString ();

1909
sumber