Aku bekerja dengan tanggal dalam format ini: yyyy-mm-dd
.
Bagaimana saya bisa meningkatkan tanggal ini satu hari?
Aku bekerja dengan tanggal dalam format ini: yyyy-mm-dd
.
Bagaimana saya bisa meningkatkan tanggal ini satu hari?
Jawaban:
Sesuatu seperti ini harus melakukan trik:
String dt = "2008-01-01"; // Start date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
c.setTime(sdf.parse(dt));
c.add(Calendar.DATE, 1); // number of days to add
dt = sdf.format(c.getTime()); // dt is now the new date
add()
akan menggulung tanggal. Lihat di ideone .
Java tampaknya jauh di belakang bola delapan dibandingkan dengan C #. Metode utilitas ini menunjukkan cara melakukannya di Java SE 6 menggunakan metode Calendar.add (mungkin satu-satunya cara mudah).
public class DateUtil
{
public static Date addDays(Date date, int days)
{
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, days); //minus number would decrement the days
return cal.getTime();
}
}
Untuk menambahkan satu hari, per pertanyaan yang diajukan, sebut sebagai berikut:
String sourceDate = "2012-02-29";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date myDate = format.parse(sourceDate);
myDate = DateUtil.addDays(myDate, 1);
java.util.Date
, java.util.Calendar
, dan java.text.SimpleDateFormat
sekarang warisan , digantikan oleh java.time kelas dibangun ke Jawa 8 dan kemudian. Lihat Tutorial oleh Oracle .
Pada Java 8 dan yang lebih baru, paket java.time membuat ini cukup otomatis. ( Tutorial )
Dengan asumsi String
input dan output:
import java.time.LocalDate;
public class DateIncrementer {
static public String addOneDay(String date) {
return LocalDate.parse(date).plusDays(1).toString();
}
}
ZonedDateDateTime
dan OffsetDateTime
juga memiliki plusDays
dan minusDays
metode sertaLocalDate
LocalDate
.
Saya lebih suka menggunakan DateUtils dari Apache. Lihatlah http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/time/DateUtils.html . Ini berguna terutama ketika Anda harus menggunakannya di banyak tempat di proyek Anda dan tidak ingin menulis metode satu liner untuk ini.
API mengatakan:
addDays (Tanggal tanggal, jumlah int): Menambahkan beberapa hari ke tanggal mengembalikan objek baru.
Perhatikan bahwa ia mengembalikan objek Date baru dan tidak membuat perubahan ke objek sebelumnya itu sendiri.
Bangun objek Kalender dan gunakan metode add (Calendar.DATE, 1);
Lihatlah Joda-Time ( https://www.joda.org/joda-time/ ).
DateTimeFormatter parser = ISODateTimeFormat.date();
DateTime date = parser.parseDateTime(dateString);
String nextDay = parser.print(date.plusDays(1));
Harap perhatikan bahwa baris ini menambahkan 24 jam:
d1.getTime() + 1 * 24 * 60 * 60 * 1000
tetapi baris ini menambahkan satu hari
cal.add( Calendar.DATE, 1 );
Pada hari dengan perubahan waktu musim panas (25 atau 23 jam), Anda akan mendapatkan hasil yang berbeda!
Java 8 menambahkan API baru untuk bekerja dengan tanggal dan waktu.
Dengan Java 8 Anda dapat menggunakan baris kode berikut:
// parse date from yyyy-mm-dd pattern
LocalDate januaryFirst = LocalDate.parse("2014-01-01");
// add one day
LocalDate januarySecond = januaryFirst.plusDays(1);
januaryFirst.plusDays(1)
tidak bermaksud demikian date.plusDays(1)
.
Anda dapat menggunakan lib java.util sederhana
Calendar cal = Calendar.getInstance();
cal.setTime(yourDate);
cal.add(Calendar.DATE, 1);
yourDate = cal.getTime();
java.util.Date
, java.util.Calendar
, dan java.text.SimpleDateFormat
sekarang warisan , digantikan oleh java.time kelas dibangun ke Jawa 8 dan kemudian. Lihat Tutorial oleh Oracle .
Date today = new Date();
SimpleDateFormat formattedDate = new SimpleDateFormat("yyyyMMdd");
Calendar c = Calendar.getInstance();
c.add(Calendar.DATE, 1); // number of days to add
String tomorrow = (String)(formattedDate.format(c.getTime()));
System.out.println("Tomorrows date is " + tomorrow);
Ini akan memberi tanggal besok. c.add(...)
parameter dapat diubah dari 1 ke nomor lain untuk kenaikan yang sesuai.
Date
atau Calendar
lagi.
Jika Anda menggunakan Java 8 , maka lakukan seperti ini.
LocalDate sourceDate = LocalDate.of(2017, Month.MAY, 27); // Source Date
LocalDate destDate = sourceDate.plusDays(1); // Adding a day to source date.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // Setting date format
String destDate = destDate.format(formatter)); // End date
Jika Anda ingin menggunakan SimpleDateFormat , maka lakukan seperti ini.
String sourceDate = "2017-05-27"; // Start date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = Calendar.getInstance();
calendar.setTime(sdf.parse(sourceDate)); // parsed date and setting to calendar
calendar.add(Calendar.DATE, 1); // number of days to add
String destDate = sdf.format(calendar.getTime()); // End date
LocalDate
kelas bukan LocalDateTime
.
long timeadj = 24*60*60*1000;
Date newDate = new Date (oldDate.getTime ()+timeadj);
Ini mengambil jumlah milidetik sejak zaman dari oldDate dan menambahkan 1 hari milidetik kemudian menggunakan konstruktor publik Date () untuk membuat tanggal menggunakan nilai baru. Metode ini memungkinkan Anda untuk menambah 1 hari, atau sejumlah jam / menit, tidak hanya sepanjang hari.
Sejak Java 1.5 TimeUnit.DAYS.toMillis (1) terlihat lebih bersih bagi saya.
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
Date day = dateFormat.parse(string);
// add the day
Date dayAfter = new Date(day.getTime() + TimeUnit.DAYS.toMillis(1));
LocalDate
kelas di java.time kelas untuk Java 8 dan kemudian, dan back-port ke Java 6 & Java 7 ditemukan dalam proyek ThreeTen-Backport .
Di Java 8 cara mudah yang harus dilakukan adalah:
Date.from(Instant.now().plusSeconds(SECONDS_PER_DAY))
Instant.now().plus( 1 , ChronoUnit.DAYS )
?
Di java 8 Anda bisa menggunakan java.time.LocalDate
LocalDate parsedDate = LocalDate.parse("2015-10-30"); //Parse date from String
LocalDate addedDate = parsedDate.plusDays(1); //Add one to the day field
Anda dapat mengonversinya menjadi java.util.Date
objek sebagai berikut.
Date date = Date.from(addedDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
Anda dapat memformat LocalDate
menjadi String sebagai berikut.
String str = addedDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
Ini sangat sederhana, berusaha menjelaskan dengan kata sederhana. dapatkan tanggal hari ini seperti di bawah ini
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());// print today's date
calendar.add(Calendar.DATE, 1);
Sekarang atur satu hari ke depan dengan tanggal ini dengan metode calendar.add yang memakan waktu (konstan, nilai). Di sini konstanta dapat DATE, jam, min, detik dll dan nilai adalah nilai konstanta. Seperti untuk satu hari, konstanta ke depan adalah Calendar.DATE dan nilainya 1 karena kita ingin nilai satu hari ke depan.
System.out.println(calendar.getTime());// print modified date which is
tanggal besok
Terima kasih
Apache Commons sudah memiliki DateUtils.addDays ini (Tanggal tanggal, jumlah int) http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/time/DateUtils.html#addDays%28java .util.Date,% 20int% 29 yang Anda gunakan atau Anda bisa menggunakan JodaTime untuk membuatnya lebih bersih.
Masukkan tanggal dalam String dan jumlah hari berikutnya
private String getNextDate(String givenDate,int noOfDays) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
String nextDaysDate = null;
try {
cal.setTime(dateFormat.parse(givenDate));
cal.add(Calendar.DATE, noOfDays);
nextDaysDate = dateFormat.format(cal.getTime());
} catch (ParseException ex) {
Logger.getLogger(GR_TravelRepublic.class.getName()).log(Level.SEVERE, null, ex);
}finally{
dateFormat = null;
cal = null;
}
return nextDaysDate;
}
Jika Anda ingin menambahkan satu unit waktu dan Anda berharap bahwa bidang lain akan bertambah juga, Anda dapat menggunakan metode add dengan aman. Lihat contoh di bawah ini:
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.set(1970,Calendar.DECEMBER,31);
System.out.println(simpleDateFormat1.format(cal.getTime()));
cal.add(Calendar.DATE, 1);
System.out.println(simpleDateFormat1.format(cal.getTime()));
cal.add(Calendar.DATE, -1);
System.out.println(simpleDateFormat1.format(cal.getTime()));
Akan Cetak:
1970-12-31
1971-01-01
1970-12-31
startCalendar.add(Calendar.DATE, 1); //Add 1 Day to the current Calender
Calendar
pada tahun 2019.
Jika Anda menggunakan Java SE 8 atau lebih tinggi Anda harus menggunakan Date / Time API baru
int days = 7;
LocalDate dateRedeemed = LocalDate.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/YYYY");
String newDate = dateRedeemed.plusDays(days).format(formatter);
System.out.println(newDate);
Jika Anda harus mengonversi dari java.util.Date
ke java.time.LocalDate
, Anda dapat menggunakan metode ini.
public LocalDate asLocalDate(Date date) {
Instant instant = date.toInstant();
ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
return zdt.toLocalDate();
}
Jika Anda menggunakan versi sebelum Java SE 8, saya menyarankan Anda untuk menggunakan Joda-Time
Joda-Time menyediakan pengganti kualitas untuk kelas tanggal dan waktu Java dan merupakan perpustakaan tanggal dan waktu standar de facto untuk Java sebelum Java SE 8
int days = 7;
DateTime dateRedeemed = DateTime.now();
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/uuuu");
String newDate = dateRedeemed.plusDays(days).toString(formatter);
System.out.println(newDate);
java.time
bagian ini salah. Itu harus dd/MM/uuuu
setara dengan yang JodaTime.
Gunakan DateFormat
API untuk mengubah String menjadi objek Tanggal, lalu gunakan Calendar
API untuk menambahkan satu hari. Beri tahu saya jika Anda ingin contoh kode tertentu, dan saya dapat memperbarui jawaban saya.
Jika Anda menggunakan Java 8, java.time.LocalDate
dan java.time.format.DateTimeFormatter
dapat membuat pekerjaan ini cukup sederhana.
public String nextDate(String date){
LocalDate parsedDate = LocalDate.parse(date);
LocalDate addedDate = parsedDate.plusDays(1);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-mm-dd");
return addedDate.format(formatter);
}
toString()
untuk menghasilkan string i yyyy-MM-dd format (dan jika Anda bersikeras, ingat bahwa mm
ini adalah menit sementara MM
adalah bulan).
Anda dapat menggunakan paket ini dari "org.apache.commons.lang3.time":
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date myNewDate = DateUtils.addDays(myDate, 4);
Date yesterday = DateUtils.addDays(myDate, -1);
String formatedDate = sdf.format(myNewDate);
Date
kelas pada 2018 adalah saran yang buruk. Kelas tanggal-waktu lama merepotkan seperti java.util.Date
, java.util.Calendar
, dan java.text.SimpleDateFormat
sekarang warisan , digantikan oleh java.time kelas dibangun ke Jawa 8 & Java 9. Lihat Tutorial oleh Oracle . Lihat Jawaban lain menggunakan LocalDate
kelas.
SimpleDateFormat
kelas sayangnya menyuntikkan zona waktu, secara implisit menerapkan zona default JVM saat ini. Jadi hasil dari kode ini akan bervariasi tergantung pada apa pun default saat ini - dan standar itu dapat berubah setiap saat selama runtime.
Sederhana sebenarnya. Suatu hari mengandung 86400000 milidetik. Jadi pertama-tama Anda mendapatkan waktu saat ini dalam milidetik dari Sistem dengan menggunakan System.currentTimeMillis()
kemudian tambahkan 84000000 milidetik dan menggunakan Date
Kelas untuk menghasilkan format tanggal untuk milidetik.
Contoh
String Today = new Date(System.currentTimeMillis()).toString();
String Today akan menjadi 2019-05-9
String Tommorow = new Date(System.currentTimeMillis() + 86400000).toString();
String Tommorow akan menjadi 2019-05-10
String DayAfterTommorow = new Date(System.currentTimeMillis() + (2 * 86400000)).toString();
String DayAfterTommorow akan menjadi 2019-05-11
Date
kelas mengerikan yang digantikan tahun yang lalu oleh kelas java.time modern . Jauh lebih sederhana untuk hanya menggunakan:LocalDate.parse( "2019-01-23" ).plusDays( 1 )
Mari kita perjelas kasus penggunaan: Anda ingin melakukan aritmatika kalender dan memulai / mengakhiri dengan java.util.Date .
Beberapa pendekatan:
Pertimbangkan menggunakan java.time.Instant :
Date _now = new Date();
Instant _instant = _now.toInstant().minus(5, ChronoUnit.DAYS);
Date _newDate = Date.from(_instant);
Date
dengan kelas java.time modern seperti Instant
. The java.time kelas sepenuhnya menggantikan kelas warisan. Secara khusus, Instant
diganti java.util.Date
.
Date newDate = new Date();
newDate.setDate(newDate.getDate()+1);
System.out.println(newDate);
Sun Apr 30 16:25:33 CEST 2017
datang Mon May 01 16:25:33 CEST 2017
. Ini masih merupakan solusi yang tidak dianjurkan. Metode ini tidak hanya ditinggalkan karena alasan yang baik, juga pada tahun 2017 kami memiliki alternatif yang sangat baik untuk Date
kelas.