Date in =newDate();LocalDateTime ldt =LocalDateTime.ofInstant(in.toInstant(),ZoneId.systemDefault());Date out =Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant());
@JigarJoshi akan luar biasa jika Anda memperbarui jawaban Anda dengan Java 8 API. Jawaban Anda adalah yang diterima yang dilihat orang terlebih dahulu.
jotaen
47
@JigarJoshi itu jawaban yang bagus, dan tentu saja juga rekomendasi @Tim untuk digunakan. joda-waktu .
Saya hanya ingin menambahkan lebih banyak kemungkinan untuk mengurangi hari dari a java.util.Date.
Apache-commons
Satu kemungkinan adalah menggunakan apache-commons-lang . Anda dapat melakukannya menggunakan DateUtilssebagai berikut:
Date dateBefore30Days =DateUtils.addDays(newDate(),-30);
Tentu saja menambahkan commons-langketergantungan untuk hanya melakukan kurangkan kurangi itu mungkin bukan pilihan yang baik, namun jika Anda sudah menggunakannya commons-langitu pilihan yang baik. Ada juga metode nyaman untuk addYears, addMonths, addWeeksdan sebagainya, kita lihat di api disini .
Tidak ada gunanya menggunakan LocalDateTimekarena kelas itu sengaja tidak memiliki konsep zona waktu atau offset-dari-UTC. Gunakan itu hanya ketika zona / offset tidak diketahui atau tidak relevan. Alih-alih menggunakan LocalDatedan meneruskan ZoneIdsaat memanggil nowmetode. Lihat Jawaban yang benar oleh Jacob van Lingen.
Basil Bourque
1
@ BasilBourque Setelah saran Anda, saya memeriksa api dan Anda benar, karena itu saya memperbarui jawabannya. Terima kasih.
albciff
Brian Montellano ingin komentar: ada tidak boleh ada sdi DateUtils, itu hanya DateUtil.
Ole VV
@ OleV.V. Brian Montellano salah, Anda dapat memeriksa DateUtilsdokumen
albciff
33
Cukup gunakan ini untuk mendapatkan tanggal sebelum 300 hari, ganti 300 dengan hari-hari Anda:
Date date =newDate();// Or where ever you get it fromDate daysAgo =newDateTime(date).minusDays(300).toDate();
Maksud saya Java 8 API, bukan 7. Dan menyebutkan paket java.timemungkin membantu. Juga, beberapa diskusi / penjelasan umumnya diharapkan pada Stack Overflow daripada hanya potongan kode. Anda harus menjelaskan Durationkarena itu adalah nilai tambah dari Jawaban Anda atas yang sudah ada oleh van Lingen .
Basil Bourque
Java 8 penyebabnya, diperbaiki
Grigory Kislin
begitu dekat, tetapi harus untuk memodifikasi objek tanggal yang sewenang-wenang, bukan "sekarang"
bharal
9
Seperti yang dapat Anda lihat DI SINI ada banyak manipulasi yang dapat Anda lakukan. Berikut ini contoh yang menunjukkan apa yang dapat Anda lakukan!
DateFormat dateFormat =newSimpleDateFormat("yyyy/MM/dd HH:mm:ss");Calendar cal =Calendar.getInstance();//Add one day to current date.
cal.add(Calendar.DATE,1);System.out.println(dateFormat.format(cal.getTime()));//Substract one day to current date.
cal =Calendar.getInstance();
cal.add(Calendar.DATE,-1);System.out.println(dateFormat.format(cal.getTime()));/* Can be Calendar.DATE or
* Calendar.MONTH, Calendar.YEAR, Calendar.HOUR, Calendar.SECOND
*/
Saya sarankan selalu melewati zona waktu opsional (atau offset-dari-UTC) ke nowmetode itu. Jika dihilangkan, zona waktu default JVM saat ini secara implisit dan diam-diam diterapkan. Default itu berada di luar kendali Anda dan dapat berubah setiap saat, bahkan saat runtime. Contoh: LocalDate.now( ZoneId.of( "America/Montreal" ).
Basil Bourque
perlu pada objek tanggal sewenang-wenang sesuai pertanyaan, bukan "sekarang"
bharal
1
Saya telah membuat fungsi untuk mempermudah tugas.
Selama 7 hari setelah dateString: dateCalculate(dateString,"yyyy-MM-dd",7);
Untuk mendapatkan 7 hari Perbaruan terbaru: dateCalculate(dateString,"yyyy-MM-dd",-7);
publicstaticString dateCalculate(String dateString,String dateFormat,int days){Calendar cal =Calendar.getInstance();SimpleDateFormat s =newSimpleDateFormat(dateFormat);try{
cal.setTime(s.parse(dateString));}catch(ParseException e){
e.printStackTrace();}
cal.add(Calendar.DATE, days);return s.format(cal.getTime());}
Pertanyaan ini melibatkan objek waktu-tanggal, bukan menghasilkan string. Omong-omong, LocalDate.parse( "2017-01-23").plusWeeks( 1 )lebih sederhana daripada menulis metode Anda sendiri dan lebih mendokumentasikan diri sendiri.
Basil Bourque
0
Anda dapat dengan mudah mengurangi dengan kalender dengan SimpleDateFormat
java.util.Date
sekarang warisan , digantikan oleh kelas java.time .Jawaban:
Java 8 dan yang lebih baru
Dengan perubahan API tanggal waktu Java 8, Gunakan
LocalDate
Demikian pula yang bisa Anda miliki
Rujuk ke https://stackoverflow.com/a/23885950/260990 untuk terjemahan antara java.util.Date <--> java.time.LocalDateTime
Java 7 dan sebelumnya
Gunakan
Calendar
'sadd()
metodesumber
java.util.Date
,java.util.Calendar
, danjava.text.SimpleTextFormat
sekarang warisan , digantikan oleh java.time kelas. Lihat Tutorial oleh Oracle .@JigarJoshi itu jawaban yang bagus, dan tentu saja juga rekomendasi @Tim untuk digunakan. joda-waktu .
Saya hanya ingin menambahkan lebih banyak kemungkinan untuk mengurangi hari dari a
java.util.Date
.Apache-commons
Satu kemungkinan adalah menggunakan apache-commons-lang . Anda dapat melakukannya menggunakan
DateUtils
sebagai berikut:Tentu saja menambahkan
commons-lang
ketergantungan untuk hanya melakukan kurangkan kurangi itu mungkin bukan pilihan yang baik, namun jika Anda sudah menggunakannyacommons-lang
itu pilihan yang baik. Ada juga metode nyaman untukaddYears
,addMonths
,addWeeks
dan sebagainya, kita lihat di api disini .Java 8
Kemungkinan lain adalah untuk mengambil keuntungan
LocalDate
dari Java 8 menggunakanminusDays(long days)
metode:sumber
LocalDateTime
karena kelas itu sengaja tidak memiliki konsep zona waktu atau offset-dari-UTC. Gunakan itu hanya ketika zona / offset tidak diketahui atau tidak relevan. Alih-alih menggunakanLocalDate
dan meneruskanZoneId
saat memanggilnow
metode. Lihat Jawaban yang benar oleh Jacob van Lingen.s
diDateUtils
, itu hanyaDateUtil
.DateUtils
dokumenCukup gunakan ini untuk mendapatkan tanggal sebelum 300 hari, ganti 300 dengan hari-hari Anda:
Sini,
DateTime
adalahorg.joda.time.DateTime;
Date
adalahjava.util.Date
sumber
API Java 8 Time:
sumber
java.time
mungkin membantu. Juga, beberapa diskusi / penjelasan umumnya diharapkan pada Stack Overflow daripada hanya potongan kode. Anda harus menjelaskanDuration
karena itu adalah nilai tambah dari Jawaban Anda atas yang sudah ada oleh van Lingen .Seperti yang dapat Anda lihat DI SINI ada banyak manipulasi yang dapat Anda lakukan. Berikut ini contoh yang menunjukkan apa yang dapat Anda lakukan!
sumber
java.util.Date
,java.util.Calendar
, danjava.text.SimpleDateFormat
sekarang warisan , digantikan oleh java.time kelas dibangun ke Jawa 8 dan kemudian. Lihat Tutorial oleh Oracle .Dengan Java 8 sekarang sangat sederhana:
Panduan hebat untuk api baru dapat ditemukan di sini .
sumber
now
metode itu. Jika dihilangkan, zona waktu default JVM saat ini secara implisit dan diam-diam diterapkan. Default itu berada di luar kendali Anda dan dapat berubah setiap saat, bahkan saat runtime. Contoh:LocalDate.now( ZoneId.of( "America/Montreal" )
.Saya telah membuat fungsi untuk mempermudah tugas.
Selama 7 hari setelah dateString:
dateCalculate(dateString,"yyyy-MM-dd",7);
Untuk mendapatkan 7 hari Perbaruan terbaru:
dateCalculate(dateString,"yyyy-MM-dd",-7);
sumber
java.util.Date
,java.util.Calendar
, danjava.text.SimpleDateFormat
yang sekarang warisan , digantikan oleh java.time kelas. Lihat Tutorial oleh Oracle .LocalDate.parse( "2017-01-23").plusWeeks( 1 )
lebih sederhana daripada menulis metode Anda sendiri dan lebih mendokumentasikan diri sendiri.Anda dapat dengan mudah mengurangi dengan kalender dengan SimpleDateFormat
sumber
sumber