Saya memiliki objek tanggal ini:
SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm");
Date d1 = df.parse(interviewList.get(37).getTime());
nilai d1 adalah Fri Jan 07 17:40:00 PKT 2011
Sekarang saya mencoba menambahkan 10 menit ke tanggal di atas.
Calendar cal = Calendar.getInstance();
cal.setTime(d1);
cal.add(Calendar.MINUTE, 10);
String newTime = df.format(cal.getTime());
Nilai newTime
perubahan 2011-50-07 17:50
tetapi seharusnya 07-01-2011 17:50
.
Itu menambahkan menit dengan benar tetapi juga mengubah bulan, tidak tahu mengapa!
java
date
calendar
simpledateformat
java.util.date
junaidp
sumber
sumber
Jawaban:
Masalah bagi Anda adalah apa yang Anda gunakan
mm
. Anda harus menggunakanMM
.MM
untuk bulan danmm
untuk menit. Coba denganyyyy-MM-dd HH:mm
Pendekatan lain:
Ini bisa sesederhana ini (opsi lain adalah menggunakan joda-time )
sumber
Anda dapat menggunakan kelas DateUtils dalam paket org.apache.commons.lang3.time
sumber
org.apache.commons.lang.time.DateUtils
Metode kenyamanan untuk mengimplementasikan jawaban @ Pangea:
sumber
Untuk menghindari ketergantungan Anda dapat menggunakan java.util.Calendar sebagai berikut:
Di Java 8 kami memiliki API baru:
sumber
Ini salah ditentukan:
Anda menggunakan menit, bukan bulan (MM)
sumber
tl; dr
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
danjava.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
.LocalDateTime
Parsing string input Anda
LocalDateTime
karena tidak memiliki info tentang zona waktu atau offset-dari-UTC.Tambahkan sepuluh menit.
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 formatcontinent/region
, sepertiAmerica/Montreal
,Africa/Casablanca
, atauPacific/Auckland
, atauAsia/Karachi
. Jangan pernah menggunakan singkatan 3-4 huruf sepertiEST
atauIST
atauPKT
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 aZonedDateTime
.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
. TheInstant
kelas merupakan saat di timeline di UTC dengan resolusi nanodetik (hingga sembilan (9) angka dari pecahan desimal).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.
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?
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
Ada kesalahan dalam pola SimpleDateFormat Anda. harus
sumber
gunakan format ini,
mm untuk menit dan MM untuk mounth
sumber
Setelah Anda mengurai tanggal, saya menggunakan fungsi utilitas ini untuk menambahkan jam, menit atau detik:
Berhati-hatilah saat menambahkan periode waktu yang lama, 1 hari tidak selalu 24 jam (penyesuaian tipe Daylight Saving, Detik Kabisat, dan sebagainya),
Calendar
disarankan untuk itu.sumber
Bekerja untuk saya DateUtils
...
sumber
Dapat dilakukan tanpa konstanta (seperti 3600000 ms adalah 1h)
contoh penggunaan:
sumber
Hanya untuk siapa saja yang tertarik. Saya sedang mengerjakan proyek iOS yang membutuhkan fungsionalitas serupa, jadi saya akhirnya mentransfer jawaban @jeznag ke cepat
sumber