Bagaimana cara mendapatkan tanggal dan waktu saat ini di Jawa?
Saya mencari sesuatu yang setara dengan DateTime.Now
dari C #.
Bagaimana cara mendapatkan tanggal dan waktu saat ini di Jawa?
Saya mencari sesuatu yang setara dengan DateTime.Now
dari C #.
Jawaban:
Hanya membangun Date
objek baru tanpa argumen; ini akan menetapkan tanggal dan waktu saat ini ke objek baru.
import java.util.Date;
Date d = new Date();
Dalam kata-kata Javadocs untuk konstruktor argumen-nol :
Mengalokasikan objek Tanggal dan menginisialisasi sehingga mewakili waktu di mana dialokasikan , diukur ke milidetik terdekat.
Pastikan Anda menggunakan java.util.Date
dan 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. :)
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:
DateTime dt = new DateTime();
Memperbarui
Seperti disebutkan dalam komentar, versi terbaru Joda Time memiliki DateTime.now()
metode, jadi:
DateTime dt = DateTime.now();
Instant.now()
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.
ZonedDateTime now = ZonedDateTime.now();
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.
ZoneId z = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ZonedDateTime.now( z );
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.
Instant instant = Instant.now();
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
. Tentukan ZoneOffset
objek. Untuk UTC gunakan konstanta praktis untuk UTC .
OffsetDateTime odt = instant.atOffset( ZoneOffset.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 EST
atau IST
.
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime nowMontreal = instant.atZone( z );
Hasilkan representasi String dari nilai tanggal-waktu itu, dilokalkan.
String output = DateTimeFormatter
.ofLocalizedDate( FormatStyle.FULL )
.withLocale( Locale.CANADA_FRENCH )
.format ( nowMontreal );
Instant
Atau, untuk tetap di UTC, gunakan Instant
. Sebuah Instant
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
dari ZonedDateTime
.
Instant instantNow = zdt.toInstant();
Anda bisa mulai dengan Instan. Tidak perlu menentukan zona waktu di sini, seperti Instant
biasa di UTC.
Instant now = Instant.now();
Saya lebih suka menggunakan objek Kalender.
Calendar now = GregorianCalendar.getInstance()
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
Calendar.getInstance()
Di Java 8 itu:
ZonedDateTime dateTime = ZonedDateTime.now();
java.lang.System.currentTimeMillis();
akan mengembalikan datetime sejak zaman
Jika Anda membuat objek Date baru, secara default akan diatur ke waktu saat ini:
import java.util.Date;
Date now = new Date();
Java selalu mendapat dukungan yang tidak memadai untuk kasus penggunaan tanggal dan waktu. Misalnya, kelas-kelas yang ada (seperti java.util.Date
dan SimpleDateFormatter
) tidak aman-thread yang dapat menyebabkan masalah konkurensi. Juga ada beberapa kekurangan di API. Misalnya, tahun java.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, seperti Joda-Time
. Untuk mengatasi tanggal dan waktu yang baru, API dirancang untuk Java SE 8.
LocalDateTime timePoint = LocalDateTime.now();
System.out.println(timePoint);
Sesuai dok :
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.