tl; dr
LocalDateTime.parse(
"2016-01-23 12:34".replace( " " , "T" )
)
.atZone( ZoneId.of( "Asia/Karachi" ) )
.plusMinutes( 10 )
java.time
Gunakan kelas java.time yang sangat baik untuk pekerjaan tanggal-waktu. Kelas-kelas ini menggantikan kelas tanggal-waktu lama yang merepotkan seperti java.util.Date
dan java.util.Calendar
.
ISO 8601
Kelas java.time menggunakan format ISO 8601 standar secara default untuk mem -parsing / menghasilkan string nilai tanggal-waktu. Untuk membuat string masukan Anda sesuai, ganti SPASI di tengah dengan a T
.
String input = "2016-01-23 12:34" ;
String inputModified = input.replace( " " , "T" );
LocalDateTime
Parsing string input Anda LocalDateTime
karena tidak memiliki info tentang zona waktu atau offset-dari-UTC.
LocalDateTime ldt = LocalDateTime.parse( inputModified );
Tambahkan sepuluh menit.
LocalDateTime ldtLater = ldt.plusMinutes( 10 );
ldt.toString (): 2016-01-23T12: 34
ldtLater.toString (): 2016-01-23T12: 44
Lihat kode langsung di IdeOne.com .
Itu LocalDateTime
tidak memiliki zona waktu, jadi itu tidak mewakili satu titik di garis waktu. Terapkan zona waktu untuk menerjemahkan ke momen aktual. Tentukan nama zona waktu yang tepat dalam format continent/region
, seperti America/Montreal
, Africa/Casablanca
, atau Pacific/Auckland
, atau Asia/Karachi
. Jangan pernah menggunakan singkatan 3-4 huruf seperti EST
atau IST
atau PKT
karena itu bukan zona waktu yang sebenarnya, tidak standar, dan bahkan tidak unik (!).
ZonedDateTime
Jika Anda mengetahui zona waktu yang dimaksudkan untuk nilai ini, terapkan a ZoneId
untuk mendapatkan a ZonedDateTime
.
ZoneId z = ZoneId.of( "Asia/Karachi" );
ZonedDateTime zdt = ldt.atZone( z );
zdt.toString (): 2016-01-23T12: 44 + 05: 00 [Asia / Karachi]
Anomali
Pikirkan apakah akan menambahkan sepuluh menit itu sebelum atau sesudah menambahkan zona waktu. Anda mungkin mendapatkan hasil yang sangat berbeda karena anomali seperti Daylight Saving Time (DST) yang menggeser waktu jam dinding .
Apakah Anda harus menambahkan 10 menit sebelum atau setelah menambahkan zona bergantung pada arti skenario dan aturan bisnis Anda.
Tip: Ketika Anda berniat untuk momen tertentu di timeline, selalu simpan informasi zona waktu . Jangan sampai kehilangan info itu, seperti yang dilakukan dengan data masukan Anda. Apakah nilai 12:34
dimaksudkan untuk siang hari di Pakistan atau tengah hari di Prancis atau tengah hari di Québec? Jika Anda bermaksud tengah hari di Pakistan, katakan demikian dengan memasukkan setidaknya offset-from-UTC ( +05:00
), dan lebih baik lagi, nama zona waktu ( Asia/Karachi
).
Instant
Jika Anda menginginkan momen yang sama seperti yang terlihat melalui lensa UTC , ekstrak file Instant
. The Instant
kelas merupakan saat di timeline di UTC dengan resolusi nanodetik (hingga sembilan (9) angka dari pecahan desimal).
Instant instant = zdt.toInstant();
Mengubah
Hindari kelas waktu kencan lama yang merepotkan jika memungkinkan. Tetapi jika Anda harus, Anda dapat bertobat. Panggil metode baru yang ditambahkan ke kelas lama.
java.util.Date utilDate = java.util.Date.from( instant );
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 java.time.
Untuk mempelajari lebih lanjut, lihat Tutorial Oracle . Dan cari Stack Overflow untuk banyak contoh dan penjelasan. Spesifikasinya adalah JSR 310 .
Dimana mendapatkan kelas java.time?
- Java SE 8 dan SE 9 dan yang lebih baru
- Bawaan.
- Bagian dari Java API standar dengan implementasi yang dibundel.
- Java 9 menambahkan beberapa fitur dan perbaikan kecil.
- Java SE 6 dan SE 7
- Sebagian besar fungsionalitas java.time di-back-port ke Java 6 & 7 di ThreeTen-Backport .
- Android
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 .