Pertanyaan ini lebih tua dari Pertanyaan ini yang sebelumnya ditandai sebagai duplikat. Jadi saya membalikkan penunjukan, membuka kembali Pertanyaan ini dan menandai yang lebih baru sebagai duplikat.
Basil Bourque
Jawaban:
414
Hanya membangun Dateobjek baru tanpa argumen; ini akan menetapkan tanggal dan waktu saat ini ke objek baru.
Mengalokasikan objek Tanggal dan menginisialisasi sehingga mewakili waktu di mana dialokasikan , diukur ke milidetik terdekat.
Pastikan Anda menggunakan java.util.Datedan tidak java.sql.Date- yang terakhir tidak memiliki konstruktor zero-arg, dan memiliki semantik yang sedikit berbeda yang merupakan topik percakapan yang sama sekali berbeda. :)
Perhatikan juga bahwa GregorianCalendar dan banyak objek serupa bekerja dengan cara yang sama. Jadi apa pun jenis objek tanggal / kalender yang Anda kerjakan, konstruktor argumen nol biasanya menginisialisasi objek ke tanggal / waktu saat ini.
Peter Di Cecco
Dari Date doc: Pada JDK 1.1, kelas Kalender harus digunakan untuk mengkonversi antara bidang tanggal dan waktu dan kelas DateFormat harus digunakan untuk memformat dan mengurai string tanggal.
Kelas Tanggal dan Kalender Java dianggap oleh banyak orang sebagai dirancang dengan buruk. Anda harus melihat Joda Time , perpustakaan yang biasa digunakan sebagai pengganti perpustakaan tanggal bawaan Java.
Setara dengan DateTime.Nowdi Joda Time adalah:
DateTime dt =newDateTime();
Memperbarui
Seperti disebutkan dalam komentar, versi terbaru Joda Time memiliki DateTime.now()metode, jadi:
Perhatikan bahwa jawaban ini diposting pada tahun 2010. Java 8 telah menyerap banyak fitur terbaik Joda Time. Lihat dokumentasi resmi dan banyak artikel daring lainnya untuk informasi lebih lanjut.
DavidS
36
tl; dr
Instant.now()
waktu java
Kelas java.util.Date telah ketinggalan zaman dengan paket java.time baru ( Tutorial ) di Java 8 dan yang lebih baru. Kelas-kelas java.util.Date/.Calendar tua terkenal merepotkan, membingungkan, dan cacat. Hindari mereka.
Time-of-day, dengan sepersekian detik ke resolusi nanosecond .
Zona waktu.
Jika tidak ada zona waktu yang ditentukan, zona waktu default JVM Anda saat ini ditetapkan secara diam-diam. Lebih baik untuk menentukan zona waktu yang Anda inginkan / harapkan daripada bergantung secara implisit pada default.
ZoneId z =ZoneId.of("Pacific/Auckland");ZonedDateTime zdt =ZonedDateTime.now( z );
UTC
Secara umum lebih baik untuk membiasakan melakukan pekerjaan back-end Anda (logika bisnis, database, penyimpanan, pertukaran data) semua dalam zona waktu UTC . Kode di atas bergantung secara implisit pada zona waktu default JVM saat ini.
The Instantkelas merupakan saat di timeline di UTC dengan resolusi nanodetik.
Instant instant =Instant.now();
The Instantkelas kelas bangunan-blok dasar di java.time dan dapat sering digunakan dalam kode Anda.
Saat Anda membutuhkan lebih banyak fleksibilitas dalam memformat, ubah menjadi OffsetDateTime. Tentukan ZoneOffsetobjek. Untuk UTC gunakan konstanta praktis untuk UTC .
Anda mudah menyesuaikan dengan zona waktu lain untuk presentasi kepada pengguna. Gunakan nama zona waktu yang tepat , jangan pernah kode 3-4 huruf seperti ESTatau IST.
ZoneId z =ZoneId.of("America/Montreal");ZonedDateTime nowMontreal = instant.atZone( z );
Hasilkan representasi String dari nilai tanggal-waktu itu, dilokalkan.
Atau, untuk tetap di UTC, gunakan Instant. Sebuah Instantobjek mewakili momen di timeline, hingga resolusi nanosecond, selalu dalam UTC. Ini menyediakan blok bangunan untuk waktu-waktu yang dikategorikan, bersama dengan penugasan zona waktu. Anda dapat memikirkannya secara konseptual dengan cara ini:
Java selalu mendapat dukungan yang tidak memadai untuk kasus penggunaan tanggal dan waktu. Misalnya, kelas-kelas yang ada (seperti java.util.Datedan SimpleDateFormatter) tidak aman-thread yang dapat menyebabkan masalah konkurensi. Juga ada beberapa kekurangan di API. Misalnya, tahun java.util.Datemulai dari tahun 1900, bulan mulai dari 1, dan hari mulai dari 0 — tidak terlalu intuitif. Masalah-masalah ini menyebabkan popularitas perpustakaan tanggal dan waktu pihak ketiga, seperti Joda-Time. Untuk mengatasi tanggal dan waktu yang baru, API dirancang untuk Java SE 8.
Metode now()mengembalikan tanggal saat ini menggunakan jam sistem dan zona waktu default, bukan nol . Itu memperoleh tanggal-waktu saat ini dari jam sistem di zona waktu default. Ini akan meminta jam sistem di zona waktu default untuk mendapatkan tanggal-waktu saat ini. Menggunakan metode ini akan mencegah kemampuan untuk menggunakan jam alternatif untuk pengujian karena jam tersebut dikodekan dengan keras.
Jawaban:
Hanya membangun
Date
objek baru tanpa argumen; ini akan menetapkan tanggal dan waktu saat ini ke objek baru.Dalam kata-kata Javadocs untuk konstruktor argumen-nol :
Pastikan Anda menggunakan
java.util.Date
dan tidakjava.sql.Date
- yang terakhir tidak memiliki konstruktor zero-arg, dan memiliki semantik yang sedikit berbeda yang merupakan topik percakapan yang sama sekali berbeda. :)sumber
Kelas Tanggal dan Kalender Java dianggap oleh banyak orang sebagai dirancang dengan buruk. Anda harus melihat Joda Time , perpustakaan yang biasa digunakan sebagai pengganti perpustakaan tanggal bawaan Java.
Setara dengan
DateTime.Now
di Joda Time adalah:Memperbarui
Seperti disebutkan dalam komentar, versi terbaru Joda Time memiliki
DateTime.now()
metode, jadi:sumber
tl; dr
waktu java
Kelas java.util.Date telah ketinggalan zaman dengan paket java.time baru ( Tutorial ) di Java 8 dan yang lebih baru. Kelas-kelas java.util.Date/.Calendar tua terkenal merepotkan, membingungkan, dan cacat. Hindari mereka.
ZonedDateTime
Dapatkan momen saat ini di java.time.
A
ZonedDateTime
merangkum:Jika tidak ada zona waktu yang ditentukan, zona waktu default JVM Anda saat ini ditetapkan secara diam-diam. Lebih baik untuk menentukan zona waktu yang Anda inginkan / harapkan daripada bergantung secara implisit pada default.
UTC
Secara umum lebih baik untuk membiasakan melakukan pekerjaan back-end Anda (logika bisnis, database, penyimpanan, pertukaran data) semua dalam zona waktu UTC . Kode di atas bergantung secara implisit pada zona waktu default JVM saat ini.
The
Instant
kelas merupakan saat di timeline di UTC dengan resolusi nanodetik.The
Instant
kelas kelas bangunan-blok dasar di java.time dan dapat sering digunakan dalam kode Anda.Saat Anda membutuhkan lebih banyak fleksibilitas dalam memformat, ubah menjadi
OffsetDateTime
. TentukanZoneOffset
objek. Untuk UTC gunakan konstanta praktis untuk UTC .Zona waktu
Anda mudah menyesuaikan dengan zona waktu lain untuk presentasi kepada pengguna. Gunakan nama zona waktu yang tepat , jangan pernah kode 3-4 huruf seperti
EST
atauIST
.Hasilkan representasi String dari nilai tanggal-waktu itu, dilokalkan.
Instant
Atau, untuk tetap di UTC, gunakan
Instant
. SebuahInstant
objek mewakili momen di timeline, hingga resolusi nanosecond, selalu dalam UTC. Ini menyediakan blok bangunan untuk waktu-waktu yang dikategorikan, bersama dengan penugasan zona waktu. Anda dapat memikirkannya secara konseptual dengan cara ini:Anda dapat mengekstrak
Instant
dariZonedDateTime
.Anda bisa mulai dengan Instan. Tidak perlu menentukan zona waktu di sini, seperti
Instant
biasa di UTC.sumber
Saya lebih suka menggunakan objek Kalender.
Saya merasa jauh lebih mudah untuk dikerjakan. Anda juga bisa mendapatkan objek Tanggal dari Kalender.
http://java.sun.com/javase/6/docs/api/java/util/GregorianCalendar.html
sumber
Calendar.getInstance()
Di Java 8 itu:
sumber
Perhatikan bahwa objek Date bisa berubah dan jika Anda ingin melakukan sesuatu yang canggih, gunakan jodatime .
sumber
java.lang.System.currentTimeMillis();
akan mengembalikan datetime sejak zamansumber
sumber
Jika Anda membuat objek Date baru, secara default akan diatur ke waktu saat ini:
sumber
Java selalu mendapat dukungan yang tidak memadai untuk kasus penggunaan tanggal dan waktu. Misalnya, kelas-kelas yang ada (seperti
java.util.Date
danSimpleDateFormatter
) tidak aman-thread yang dapat menyebabkan masalah konkurensi. Juga ada beberapa kekurangan di API. Misalnya, tahunjava.util.Date
mulai dari tahun 1900, bulan mulai dari 1, dan hari mulai dari 0 — tidak terlalu intuitif. Masalah-masalah ini menyebabkan popularitas perpustakaan tanggal dan waktu pihak ketiga, sepertiJoda-Time
. Untuk mengatasi tanggal dan waktu yang baru, API dirancang untuk Java SE 8.Sesuai dok :
sumber