tl; dr
LocalDate.of( 2014 , 2 , 11 )
Jika Anda bersikeras untuk menggunakan java.util.Dateclass lama yang mengerikan , ubah dari class java.time modern .
java.util.Date
.from(
LocalDate
.of( 2014 , 2 , 11 )
.atStartOfDay(
ZoneId.of( "Africa/Tunis" )
)
.toInstant()
)
Detail
Jika Anda ingin "mudah", Anda harus menggunakan paket java.time baru di Java 8 daripada kelas java.util.Date & .Calendar yang terkenal menyusahkan yang digabungkan dengan Java.
java.time
The java.time kerangka dibangun ke Jawa 8 dan kemudian supplants kelas java.util.Date/.Calendar tua merepotkan.
Tanggal saja

Sebuah LocalDatekelas yang ditawarkan oleh java.time untuk mewakili nilai tanggal-satunya tanpa waktu-of-hari atau zona waktu. Anda memang membutuhkan zona waktu untuk menentukan tanggal, karena hari baru terbit lebih awal di Paris daripada di Montréal misalnya. The ZoneIdkelas untuk zona waktu.
ZoneId zoneId = ZoneId.of( "Asia/Singapore" );
LocalDate today = LocalDate.now( zoneId );
Buang ke konsol:
System.out.println ( "today: " + today + " in zone: " + zoneId );
hari ini: 2015-11-26 di zona: Asia / Singapura
Atau gunakan metode pabrik untuk menentukan tahun, bulan, hari.
LocalDate localDate = LocalDate.of( 2014 , Month.FEBRUARY , 11 );
localDate: 2014-02-11
Atau berikan nomor bulan 1-12 daripada DayOfWeekobjek enum.
LocalDate localDate = LocalDate.of( 2014 , 2 , 11 );
Zona waktu

A LocalDatetidak memiliki arti yang sebenarnya sampai Anda menyesuaikannya menjadi zona waktu. Di java.time, kami menerapkan zona waktu untuk menghasilkan ZonedDateTimeobjek. Itu juga berarti waktu dalam sehari, tapi jam berapa? Biasanya masuk akal untuk pergi dengan momen pertama hari itu. Anda mungkin berpikir itu berarti waktu 00:00:00.000, tetapi tidak selalu benar karena Daylight Saving Time (DST) dan mungkin anomali lainnya. Alih-alih mengasumsikan waktu itu, kami meminta java.time untuk menentukan momen pertama hari itu dengan menelepon atStartOfDay.
Tentukan nama zona waktu yang tepat dalam format continent/region, seperti America/Montreal, Africa/Casablanca, atau Pacific/Auckland. Jangan pernah menggunakan singkatan 3-4 huruf seperti ESTatau ISTkarena itu bukan zona waktu yang sebenarnya, tidak standar, dan bahkan tidak unik (!).
ZoneId zoneId = ZoneId.of( "Asia/Singapore" );
ZonedDateTime zdt = localDate.atStartOfDay( zoneId );
zdt: 2014-02-11T00: 00 + 08: 00 [Asia / Singapura]
UTC

Untuk pekerjaan back-end (logika bisnis, database, penyimpanan & pertukaran data) kami biasanya menggunakan zona waktu UTC . Di java.time, Instantkelas mewakili momen di timeline dalam UTC. Objek Instan dapat diekstraksi dari ZonedDateTime dengan memanggil toInstant.
Instant instant = zdt.toInstant();
instan: 2014-02-10T16: 00: 00Z
Mengubah
Anda harus menghindari penggunaan java.util.Datekelas sepenuhnya. Tetapi jika Anda harus beroperasi dengan kode lama yang belum diperbarui untuk java.time , Anda dapat mengonversi bolak-balik. Lihat metode konversi baru yang ditambahkan ke kelas lama.
java.util.Date d = java.util.from( instant ) ;
…dan…
Instant instant = d.toInstant() ;

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.
Untuk mempelajari lebih lanjut, lihat Tutorial Oracle . Dan cari Stack Overflow untuk banyak contoh dan penjelasan. Spesifikasinya adalah JSR 310 .
Proyek Joda-Time , sekarang dalam mode pemeliharaan , menyarankan migrasi ke kelas java.time .
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. Hibernate 5 & JPA 2.2 mendukung java.time .
Dimana mendapatkan kelas java.time?
UPDATE: Perpustakaan Joda-Time sekarang dalam mode pemeliharaan, dan menyarankan migrasi ke kelas java.time . Saya meninggalkan bagian ini untuk sejarah.
Waktu Joda
Untuk satu hal, Joda-Time menggunakan penomoran yang masuk akal sehingga Februari 2tidak 1. Hal lain, Joda-Time DateTime benar-benar mengetahui zona waktu yang ditetapkan tidak seperti java.util.Date yang tampaknya memiliki zona waktu tetapi tidak.
Dan jangan lupa zona waktunya. Jika tidak, Anda akan mendapatkan default JVM.
DateTimeZone timeZone = DateTimeZone.forID( "Asia/Singapore" );
DateTime dateTimeSingapore = new DateTime( 2014, 2, 11, 0, 0, timeZone );
DateTime dateTimeUtc = dateTimeSingapore.withZone( DateTimeZone.UTC );
java.util.Locale locale = new java.util.Locale( "ms", "SG" );
String output = DateTimeFormat.forStyle( "FF" ).withLocale( locale ).print( dateTimeSingapore );
Buang ke konsol…
System.out.println( "dateTimeSingapore: " + dateTimeSingapore );
System.out.println( "dateTimeUtc: " + dateTimeUtc );
System.out.println( "output: " + output );
Saat lari…
dateTimeSingapore: 2014-02-11T00:00:00.000+08:00
dateTimeUtc: 2014-02-10T16:00:00.000Z
output: Selasa, 2014 Februari 11 00:00:00 SGT
Konversi
Jika Anda perlu mengonversi ke java.util.Date untuk digunakan dengan kelas lain…
java.util.Date date = dateTimeSingapore.toDate();