readyStatement.setTimestamp (1, Timestamp baru (System.currentTimeMillis ()));
Rajat
Kesalahan apa yang Anda dapatkan?
Robert Columbia
FYI, kelas tanggal-waktu lama yang sangat menyusahkan seperti SimpleDateFormatdan java.sql.Timestampsekarang adalah warisan , digantikan oleh kelas java.time yang dibangun ke dalam Java 8 dan yang lebih baru. Lihat Tutorial oleh Oracle .
Basil Bourque
Jawaban:
202
Menggantikan
newTimestamp();
dengan
new java.util.Date()
karena tidak ada konstruktor default untuk Timestamp, atau Anda dapat melakukannya dengan metode:
FYI, kelas tanggal-waktu lama yang sangat menyusahkan seperti java.util.Datedan java.sql.Timestampsekarang adalah warisan , digantikan oleh kelas java.time yang dibangun ke dalam Java 8 dan yang lebih baru. Lihat Tutorial oleh Oracle .
Ini membantu saya keluar dan saya membuat beberapa perubahan jadi saya tidak perlu mengimpor new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date())
Pini Cheyni
Lebih baik new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(new Date());
Zon
36
tl; dr
Gunakan hanya kelas java.time modern . Tidak pernah menggunakan kelas warisan yang mengerikan seperti SimpleDateFormat, Date, atau java.sql.Timestamp.
ZonedDateTime// Represent a moment as perceived in the wall-clock time used by the people of a particular region ( a time zone)..now(// Capture the current moment.ZoneId.of("Africa/Tunis")// Specify the time zone using proper Continent/Region name. Never use 3-4 character pseudo-zones such as PDT, EST, IST. )// Returns a `ZonedDateTime` object. .format(// Generate a `String` object containing text representing the value of our date-time object. DateTimeFormatter.ofPattern("uuuu.MM.dd.HH.mm.ss"))// Returns a `String`.
Tipe java.sql, seperti java.sql.Timestamp, seharusnya hanya digunakan untuk transfer masuk dan keluar dari database. Segera konversi ke tipe java.time di Java 8 dan yang lebih baru.
java.time.Instant
A java.sql.Timestampmemetakan ke java.time.Instant, sesaat pada timeline di UTC. Perhatikan metode konversi baru yang toInstantditambahkan ke kelas lama.
Gunakan a DateTimeFormatteruntuk menghasilkan string Anda. Kode polanya mirip dengan yang ada java.text.SimpleDateFormattetapi tidak persis, jadi baca dokumen dengan cermat.
Format khusus ini tidak jelas untuk arti persisnya karena tidak memiliki indikasi offset-dari-UTC atau zona waktu.
ISO 8601
Jika Anda memiliki hak suara dalam masalah ini, saya sarankan Anda mempertimbangkan untuk menggunakan format standar ISO 8601 daripada menggulirkan sendiri. Format standar sangat mirip dengan Anda. Sebagai contoh: 2016-02-20T03:26:32+05:30.
Kelas java.time menggunakan format standar ini secara default, jadi tidak perlu menentukan pola. The ZonedDateTimekelas meluas format standar dengan menambahkan nama zona waktu (perbaikan bijaksana).
Untuk mempelajari lebih lanjut, lihat Tutorial Oracle . Dan cari Stack Overflow untuk banyak contoh dan penjelasan. Spesifikasi adalah JSR 310 .
Anda dapat bertukar objek java.time secara langsung dengan database Anda. Gunakan driver JDBC yang sesuai dengan JDBC 4.2 atau yang lebih baru. Tidak perlu untuk string, tidak perlu untuk java.sql.*kelas.
Proyek ThreeTen-Extra memperpanjang java.time dengan kelas tambahan. Proyek ini adalah ajang pembuktian untuk kemungkinan penambahan masa depan ke java.time. Anda mungkin menemukan beberapa kelas berguna di sini seperti Interval, YearWeek, YearQuarter, dan lebih .
Jadi, apa Cara yang Benar untuk mendapatkan cap waktu jam dinding saat ini dalam format "yyyy.MM.dd.HH.mm.ss"? Tanpa secara eksplisit menentukan string kode keras dari zona waktu lokal saya? Itulah yang diminta starter topik, dan saya tidak dapat menemukannya dalam jawaban Anda ...
t7ko
@ t7ko Saya menambahkan sederet kode contoh ke bagian tl; dr yang menunjukkan cara bertanya secara eksplisit tentang zona waktu default JVM saat ini. Memanggil `now () 'tanpa argumen apa pun melakukan hal yang sama tetapi tidak jelas apakah Anda bermaksud menggunakan default atau jika Anda tidak tahu atau lupa tentang masalah penting zona waktu.
Basil Bourque
32
Anda dapat menggunakan java.util.Date alih-alih Timestamp:
Pendekatan yang lebih tepat adalah menentukan wilayah Lokal sebagai parameter dalam konstruktor. Contoh di bawah ini menggunakan wilayah Lokal AS. Pemformatan tanggal peka-lokal dan menggunakan Lokal untuk menyesuaikan informasi relatif dengan kebiasaan dan konvensi kawasan pengguna (Java Platform SE 7)
Tidak ada yang namanya "Zona Lokal". Saya menduga Anda membingungkan Localedan zona waktu yang tidak terkait. Localemengontrol norma budaya untuk pemformatan dan bahasa manusia yang digunakan untuk nama bulan / hari. Zona waktu menyesuaikan representasi tanggal-waktu agar sesuai dengan waktu-jam dinding suatu wilayah . Dalam kasus Pertanyaan ini, Lokal tidak relevan karena tidak ada masalah pemformatan untuk menerapkan norma budaya dan juga tidak ada nama bulan / hari untuk dilokalisasi ke bahasa manusia tertentu.
Basil Bourque
@BasilBourque Terima kasih atas masukan Anda. Saya telah memperbarui jawabannya menjadi lebih eksplisit
user3144836
4
Anda dapat menggunakan yang berikut ini
new java.sql.Timestamp(System.currentTimeMillis()).getTime()Result:1539594988651
Semoga ini bisa membantu. Hanya saran saya dan bukan untuk poin hadiah.
Tidak ada format string yang diminta. Juga saya khawatir bahwa satu-satunya hal yang ditambahkan ke beberapa jawaban yang sama, adalah komplikasi yang tidak perlu ...
Ole VV
4
Gunakan java.timekelas modern jika Anda menggunakan java 8 atau lebih baru.
String s =DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());
Jawaban Basil Bourque cukup bagus. Tapi ini terlalu lama. Banyak orang tidak punya kesabaran untuk membacanya. 3 jawaban teratas terlalu tua dan mungkin menyesatkan lebah baru Jawa. Jadi saya berikan jawaban singkat dan modern ini untuk pengembang baru yang baru datang. Semoga jawaban ini bisa mengurangi penggunaan yang mengerikan SimpleDateFormat.
SimpleDateFormat
danjava.sql.Timestamp
sekarang adalah warisan , digantikan oleh kelas java.time yang dibangun ke dalam Java 8 dan yang lebih baru. Lihat Tutorial oleh Oracle .Jawaban:
Menggantikan
dengan
karena tidak ada konstruktor default untuk
Timestamp
, atau Anda dapat melakukannya dengan metode:sumber
java.util.Date
danjava.sql.Timestamp
sekarang adalah warisan , digantikan oleh kelas java.time yang dibangun ke dalam Java 8 dan yang lebih baru. Lihat Tutorial oleh Oracle .Gunakan
java.util.Date
kelas bukan Timestamp.Ini akan memberi Anda tanggal saat ini dalam format yang ditentukan.
sumber
new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date())
new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(new Date())
;tl; dr
Gunakan hanya kelas java.time modern . Tidak pernah menggunakan kelas warisan yang mengerikan seperti
SimpleDateFormat
,Date
, ataujava.sql.Timestamp
.Atau gunakan zona waktu default JVM saat ini.
java.time & JDBC 4.2
Pendekatan modern menggunakan kelas java.time seperti yang terlihat di atas.
Jika driver JDBC Anda sesuai dengan JDBC 4.2 , Anda dapat langsung bertukar objek java.time dengan database. Gunakan
PreparedStatement::setObject
danResultSet::getObject
.Gunakan java.sql hanya untuk driver sebelum JDBC 4.2
Jika driver JDBC Anda belum mematuhi JDBC 4.2 untuk dukungan tipe java.time , Anda harus kembali menggunakan kelas java.sql.
Menyimpan data.
Mengambil data.
Tipe java.sql, seperti
java.sql.Timestamp
, seharusnya hanya digunakan untuk transfer masuk dan keluar dari database. Segera konversi ke tipe java.time di Java 8 dan yang lebih baru.java.time.Instant
A
java.sql.Timestamp
memetakan kejava.time.Instant
, sesaat pada timeline di UTC. Perhatikan metode konversi baru yangtoInstant
ditambahkan ke kelas lama.Zona waktu
Terapkan zona waktu yang diinginkan / diharapkan (
ZoneId
) untuk mendapatkan aZonedDateTime
.String Terformat
Gunakan a
DateTimeFormatter
untuk menghasilkan string Anda. Kode polanya mirip dengan yang adajava.text.SimpleDateFormat
tetapi tidak persis, jadi baca dokumen dengan cermat.Format khusus ini tidak jelas untuk arti persisnya karena tidak memiliki indikasi offset-dari-UTC atau zona waktu.
ISO 8601
Jika Anda memiliki hak suara dalam masalah ini, saya sarankan Anda mempertimbangkan untuk menggunakan format standar ISO 8601 daripada menggulirkan sendiri. Format standar sangat mirip dengan Anda. Sebagai contoh:
2016-02-20T03:26:32+05:30
.Kelas java.time menggunakan format standar ini secara default, jadi tidak perlu menentukan pola. The
ZonedDateTime
kelas meluas format standar dengan menambahkan nama zona waktu (perbaikan bijaksana).Konversikan ke java.sql
Anda dapat mengonversi dari java.time kembali ke
java.sql.Timestamp
. EkstrakInstant
dariZonedDateTime
.Metode baru telah ditambahkan ke kelas lama untuk memfasilitasi konversi ke / dari kelas java.time.
Tentang java.time
The java.time kerangka dibangun ke Jawa 8 dan kemudian. Kelas-kelas ini menggantikan tua merepotkan warisan kelas tanggal-waktu seperti
java.util.Date
,Calendar
, &SimpleDateFormat
.Proyek Joda-Time , sekarang dalam mode pemeliharaan , menyarankan migrasi ke kelas java.time .
Untuk mempelajari lebih lanjut, lihat Tutorial Oracle . Dan cari Stack Overflow untuk banyak contoh dan penjelasan. Spesifikasi adalah JSR 310 .
Anda dapat bertukar objek java.time secara langsung dengan database Anda. Gunakan driver JDBC yang sesuai dengan JDBC 4.2 atau yang lebih baru. Tidak perlu untuk string, tidak perlu untuk
java.sql.*
kelas.Di mana mendapatkan kelas java.time?
Proyek ThreeTen-Extra memperpanjang java.time dengan kelas tambahan. Proyek ini adalah ajang pembuktian untuk kemungkinan penambahan masa depan ke java.time. Anda mungkin menemukan beberapa kelas berguna di sini seperti
Interval
,YearWeek
,YearQuarter
, dan lebih .sumber
Anda dapat menggunakan java.util.Date alih-alih Timestamp:
sumber
Pendekatan yang lebih tepat adalah menentukan wilayah Lokal sebagai parameter dalam konstruktor. Contoh di bawah ini menggunakan wilayah Lokal AS. Pemformatan tanggal peka-lokal dan menggunakan Lokal untuk menyesuaikan informasi relatif dengan kebiasaan dan konvensi kawasan pengguna (Java Platform SE 7)
sumber
Locale
dan zona waktu yang tidak terkait.Locale
mengontrol norma budaya untuk pemformatan dan bahasa manusia yang digunakan untuk nama bulan / hari. Zona waktu menyesuaikan representasi tanggal-waktu agar sesuai dengan waktu-jam dinding suatu wilayah . Dalam kasus Pertanyaan ini, Lokal tidak relevan karena tidak ada masalah pemformatan untuk menerapkan norma budaya dan juga tidak ada nama bulan / hari untuk dilokalisasi ke bahasa manusia tertentu.Anda dapat menggunakan yang berikut ini
Semoga ini bisa membantu. Hanya saran saya dan bukan untuk poin hadiah.
sumber
Gunakan
java.time
kelas modern jika Anda menggunakan java 8 atau lebih baru.Jawaban Basil Bourque cukup bagus. Tapi ini terlalu lama. Banyak orang tidak punya kesabaran untuk membacanya. 3 jawaban teratas terlalu tua dan mungkin menyesatkan lebah baru Jawa. Jadi saya berikan jawaban singkat dan modern ini untuk pengembang baru yang baru datang. Semoga jawaban ini bisa mengurangi penggunaan yang mengerikan
SimpleDateFormat
.sumber