Bagaimana cara membuat Stempel Waktu dengan tanggal 23/09/2007?
100
Oleh Timestamp
, saya kira Anda maksud java.sql.Timestamp
. Anda akan melihat bahwa kelas ini memiliki konstruktor yang menerima long
argumen. Anda dapat mengurai ini menggunakan DateFormat
kelas:
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Date date = dateFormat.parse("23/09/2007");
long time = date.getTime();
new Timestamp(time);
java.util.Date
,java.util.Calendar
, danjava.text.SimpleDateFormat
sekarang warisan , digantikan oleh java.time kelas dibangun ke Jawa 8 dan kemudian. Lihat Tutorial oleh Oracle .Bagaimana dengan ini?
sumber
Apa maksudmu cap waktu? Jika yang Anda maksud adalah milidetik sejak zaman Unix:
Jika Anda menginginkan objek java.sql.Timestamp sebenarnya:
sumber
Calendar.SEPTEMBER
tl; dr
java.time
Mari perbarui halaman ini dengan menunjukkan kode menggunakan framework java.time yang dibangun ke dalam Java 8 dan yang lebih baru.
Kelas-kelas baru ini terinspirasi oleh Joda-Time , ditentukan oleh JSR 310 , dan diperpanjang oleh ThreeTen-Extra . Mereka menggantikan kelas tanggal-waktu lama yang terkenal merepotkan yang dibundel dengan versi awal Java.
Di java.time, sebuah
Instant
momen di timeline dalam UTC. AZonedDateTime
adalah Sekejap yang disesuaikan dengan zona waktu (ZoneId
).Zona waktu sangat penting di sini. Tanggal
September 23, 2007
tidak dapat diterjemahkan menjadi momen di garis waktu tanpa menerapkan zona waktu. Pertimbangkan bahwa hari baru terbit lebih awal di Paris daripada di Montréal yang masih “kemarin”.Selain itu, java.sql.Timestamp mewakili tanggal dan waktu. Jadi kita harus memasukkan waktu hari untuk mengikuti tanggal. Kami berasumsi bahwa Anda menginginkan momen pertama hari itu sebagai waktu dalam sehari. Perhatikan bahwa ini tidak selalu merupakan waktu
00:00:00.0
karena Daylight Saving Time dan kemungkinan anomali lainnya.Perhatikan bahwa tidak seperti kelas java.util.Date lama, dan tidak seperti Joda-Time, jenis java.time memiliki resolusi nanodetik daripada milidetik. Ini cocok dengan resolusi java.sql.Timestamp.
Perhatikan bahwa java.sql.Timestamp memiliki kebiasaan buruk untuk secara implisit menerapkan zona waktu default JVM Anda saat ini ke nilai tanggal-waktu saat membuat representasi string melalui
toString
metodenya. Di sini Anda melihatAmerica/Los_Angeles
zona waktu saya diterapkan. Sebaliknya, kelas java.time lebih waras, menggunakan format ISO 8601 standar.Buang ke konsol.
Saat dijalankan.
Omong-omong, pada JDBC 4.2, Anda dapat menggunakan tipe java.time secara langsung. Tidak perlu
java.sql.Timestamp
.PreparedStatement.setObject
ResultSet.getObject
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. Spesifikasinya adalah JSR 310 .
Anda dapat bertukar objek java.time langsung dengan database Anda. Gunakan driver JDBC yang sesuai dengan JDBC 4.2 atau yang lebih baru. Tidak perlu string, tidak perlu
java.sql.*
kelas.Dimana mendapatkan kelas java.time?
Proyek ThreeTen-Extra memperluas java.time dengan kelas tambahan. Proyek ini adalah tempat pembuktian untuk kemungkinan penambahan java.time di masa mendatang. Anda mungkin menemukan beberapa kelas berguna di sini seperti
Interval
,YearWeek
,YearQuarter
, dan lebih .sumber
Anda juga bisa melakukan hal berikut:
sumber
Menurut API , konstruktor yang akan menerima tahun, bulan, dan seterusnya sudah tidak digunakan lagi. Sebaliknya Anda harus menggunakan Pembuat yang menerima panjang. Anda dapat menggunakan implementasi Kalender untuk menyusun tanggal yang Anda inginkan dan mengakses representasi waktu sebagai long, misalnya dengan metode getTimeInMillis .
sumber
Demi kelengkapan, juga solusi dengan Joda-Time versi 2.5 dan
DateTime
kelasnya:sumber
DateTime
objek. Itu berarti hasil Anda akan bervariasi di berbagai komputer atau konfigurasi OS host atau pengaturan JVM. Untuk hasil yang dapat diprediksi, teruskan zona waktu keDateTime
konstruktor tersebut. Pilih nama zona waktu yang tepat untuk tujuan Anda. Misalnya,DateTimeZone.forID( "America/Montreal" )
atauDateTimeZone.UTC
.DateTime
objek milidetik-sejak-epochnya. Ganti.toDate().getTime()
dengan.getMillis()
.DateTimeZone.getDefault()
dan meneruskan hasilnya sebagai argumen opsional. (Ngomong-ngomong, ditto untukLocale.getDefault()
, masalah yang sama tentang ambiguitas argumen opsional.)Jawaban yang lebih umum adalah mengimpor
java.util.Date
, lalu ketika Anda perlu menyeteltimestamp
sama dengan tanggal saat ini, cukup setel sama dengannew Date()
.sumber