Bu biçimde bir tarihle çalışıyorum: yyyy-mm-dd
.
Bu tarihi bir gün nasıl artırabilirim?
Bu biçimde bir tarihle çalışıyorum: yyyy-mm-dd
.
Bu tarihi bir gün nasıl artırabilirim?
Yanıtlar:
Böyle bir şey hile yapmalıdır:
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()
tarihi atar. İdeone bakın .
Java, C # ile karşılaştırıldığında sekiz topun çok gerisinde görünüyor. Bu yardımcı program, Calendar.add yöntemini (muhtemelen tek kolay yol) kullanarak Java SE 6'da yapmanın yolunu gösterir .
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();
}
}
Bir gün eklemek için, sorulan soru başına, aşağıdaki gibi arayın:
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
ve java.text.SimpleDateFormat
şimdi mirası supplanted, java.time sonra Java 8 ve yerleşik sınıflara. Oracle'ın Öğreticisine bakın .
Java 8 ve sonraki sürümlerinde java.time paketi bunu hemen hemen otomatik hale getirir. ( Eğitim )
String
Girdi ve çıktı varsayıldığında :
import java.time.LocalDate;
public class DateIncrementer {
static public String addOneDay(String date) {
return LocalDate.parse(date).plusDays(1).toString();
}
}
ZonedDateDateTime
ve OffsetDateTime
ayrıca sahip plusDays
ve minusDays
yöntemleri yanı sıraLocalDate
LocalDate
.
Apache'den DateUtils kullanmayı tercih ediyorum . Bu http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/time/DateUtils.html adresini kontrol edin . Özellikle projenizde birden fazla yer kullanmanız gerektiğinde kullanışlıdır ve bunun için bir astar yönteminizi yazmak istemezsiniz.
API diyor ki:
addDays (Tarih tarihi, int tutarı): Yeni bir nesne döndüren bir tarihe birkaç gün ekler.
Yeni bir Date nesnesi döndürdüğünü ve bir öncekinin kendisinde değişiklik yapmadığını unutmayın.
Bir Calendar nesnesi oluşturun ve add yöntemini kullanın (Calendar.DATE, 1);
Joda-Time'a bir göz atın ( https://www.joda.org/joda-time/ ).
DateTimeFormatter parser = ISODateTimeFormat.date();
DateTime date = parser.parseDateTime(dateString);
String nextDay = parser.print(date.plusDays(1));
Lütfen bu satırın 24 saat eklediğini unutmayın:
d1.getTime() + 1 * 24 * 60 * 60 * 1000
ama bu satır bir gün ekliyor
cal.add( Calendar.DATE, 1 );
Yaz saati uygulaması değişikliği olan günlerde (25 veya 23 saat) farklı sonuçlar elde edersiniz!
Java 8, tarih ve saatlerle çalışmak için yeni bir API ekledi.
Java 8 ile aşağıdaki kod satırlarını kullanabilirsiniz:
// 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)
istemiyordun date.plusDays(1)
.
Basit java.util lib kullanabilirsiniz
Calendar cal = Calendar.getInstance();
cal.setTime(yourDate);
cal.add(Calendar.DATE, 1);
yourDate = cal.getTime();
java.util.Date
, java.util.Calendar
ve java.text.SimpleDateFormat
şimdi mirası supplanted, java.time sonra Java 8 ve yerleşik sınıflara. Oracle'ın Öğreticisine bakın .
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);
Bu yarının tarihini verecektir. c.add(...)
parametreler uygun artış için 1'den başka bir sayıya değiştirilebilir.
Date
veya Calendar
tekrar kullanmaya gerek yok .
Java 8 kullanıyorsanız , böyle yapın.
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
SimpleDateFormat kullanmak istiyorsanız , bunu böyle yapın.
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
sınıfı kullanmayın LocalDateTime
.
long timeadj = 24*60*60*1000;
Date newDate = new Date (oldDate.getTime ()+timeadj);
Bu, oldDate döneminden bu yana geçen milisaniye sayısını alır ve 1 gün değerinde milisaniye ekler, ardından yeni değeri kullanarak bir tarih oluşturmak için Date () genel yapıcısını kullanır. Bu yöntem, yalnızca tam günleri değil, 1 gün veya istediğiniz sayıda saat / dakika eklemenizi sağlar.
Java 1.5'ten beri TimeUnit.DAYS.toMillis (1) bana daha temiz görünüyor.
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
Java 8 ve üstü için java.time sınıflarındaki sınıf ve ThreeTen-Backport projesinde bulunan Java 6 ve Java 7'ye arka bağlantı noktası olduğunu çok daha akıllıca bir yaklaşım olarak öneriyorum .
Java 8'de yapmanın basit yolu:
Date.from(Instant.now().plusSeconds(SECONDS_PER_DAY))
Instant.now().plus( 1 , ChronoUnit.DAYS )
?
Java 8'de şunları kullanabilirsiniz: 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
java.util.Date
Nesneye aşağıdaki gibi dönüştürebilirsiniz .
Date date = Date.from(addedDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
Sen format edebilirsiniz LocalDate
şöyle bir Dizesi'ne.
String str = addedDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
Çok basit, basit bir kelimeyle açıklamaya çalışmak. bugünün tarihini aşağıdaki gibi al
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());// print today's date
calendar.add(Calendar.DATE, 1);
Şimdi (sabit, değer) alan calendar.add yöntemiyle bu tarihle bir gün önceden ayarlayın. Burada sabit DATE, saat, dakika, saniye vb. Olabilir ve değer sabitin değeridir. Bir gün gibi, ön sabit de Calendar.DATE ve değeri 1'dir, çünkü bir gün ileri değeri istiyoruz.
System.out.println(calendar.getTime());// print modified date which is
yarının tarihi
Teşekkürler
Apache Commons'ta zaten bu DateUtils.addDays (Tarih tarihi, int tutarı) http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/time/DateUtils.html#addDays%28java .util.Date, kullandığınız veya daha temiz hale getirmek için JodaTime ile gidebileceğiniz % 20int% 29 .
Dizeyi ve sonraki gün sayısını girmeniz yeterlidir
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;
}
Tek bir zaman birimi eklemek istiyorsanız ve diğer alanların da artırılmasını bekliyorsanız, add yöntemini güvenle kullanabilirsiniz. Aşağıdaki örneğe bakın:
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()));
Yazdırılacak:
1970-12-31
1971-01-01
1970-12-31
startCalendar.add(Calendar.DATE, 1); //Add 1 Day to the current Calender
Calendar
2019'da kötü tasarlanmış ve eski modası geçmiş sınıfı kullanmamalıdır.
Java SE 8 veya üstünü kullanıyorsanız yeni Tarih / Saat API'sını kullanmanız gerekir
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);
Hedefine dönüştürmeniz java.util.Date
gerekiyorsa java.time.LocalDate
, bu yöntemi kullanabilirsiniz.
public LocalDate asLocalDate(Date date) {
Instant instant = date.toInstant();
ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
return zdt.toLocalDate();
}
Java SE 8'den önceki bir sürümü kullanıyorsanız Joda-Time'ı kullanmanızı öneririm
Joda-Time, Java tarih ve saat sınıfları için kaliteli bir değiştirme sağlar ve Java SE 8'den önce Java için fiili standart tarih ve saat kütüphanesidir
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
Parça için deseniniz yanlış. dd/MM/uuuu
JodaTime'a eşdeğer olmalıdır .
DateFormat
Dizeyi bir Date nesnesine dönüştürmek için API'yı kullanın , ardından Calendar
bir gün eklemek için API'yı kullanın. Belirli kod örnekleri istiyorsanız bana bildirin ve cevabımı güncelleyebilirim.
Java 8 kullanıyorsanız java.time.LocalDate
ve java.time.format.DateTimeFormatter
bu işi oldukça basit hale getirebiliyorsanız.
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()
i yyyy-AA-gg biçimini oluşturmak için kullanın (ve ısrar ederseniz , ayın mm
dakika olduğunu unutmayın MM
).
Bu paketi "org.apache.commons.lang3.time" adresinden kullanabilirsiniz:
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
2018 yılında sınıf yoksul tavsiyedir. Gibi zahmetli eski tarih-saat sınıfları java.util.Date
, java.util.Calendar
ve java.text.SimpleDateFormat
şimdi mirası supplanted, java.time Java 8 ve Java 9. Bkz yerleşik sınıflara Öğreticisi Oracle tarafından . LocalDate
Sınıfı kullanarak diğer Yanıtlara bakın .
SimpleDateFormat
Sınıf maalesef örtülü JVM geçerli varsayılan dilimini uygulayarak, bir saat dilimi enjekte eder. Bu nedenle, bu kodun sonuçları, geçerli varsayılanın ne olduğuna göre değişir - ve bu varsayılan, çalışma zamanı sırasında herhangi bir anda değişebilir .
Aslında basit. Bir gün 86400000 miliSaniye içerir. Bu yüzden ilk önce geçerli saati System.currentTimeMillis()
Milis'te Sistem'den alıp 84000000 miliSaniye ekleyin veDate
ve Milisaniye için A tarih biçimi oluşturmak Sınıfı kullanın.
Misal
String Today = new Date(System.currentTimeMillis()).toString();
Dize Bugün 2019-05-9 olacak
String Tommorow = new Date(System.currentTimeMillis() + 86400000).toString();
String Tommorow 2019-05-10 olacak
String DayAfterTommorow = new Date(System.currentTimeMillis() + (2 * 86400000)).toString();
String DayAfterTommorow 2019-05-11 olacak
Date
yıllar önce modern java.time sınıflarının yerini alan korkunç sınıfı kullanır . Kullanımı çok daha basit:LocalDate.parse( "2019-01-23" ).plusDays( 1 )
Kullanım durumunu açıklığa kavuşturalım: Takvim aritmetiği yapmak ve bir java.util ile başlangıç / bitiş yapmak istiyorsunuz. .
Bazı yaklaşımlar:
Kullanmayı düşünün java.time.Instant :
Date _now = new Date();
Instant _instant = _now.toInstant().minus(5, ChronoUnit.DAYS);
Date _newDate = Date.from(_instant);
Date
modern java.time sınıflarıyla karıştırmayın Instant
. Java.time sınıfları tamamen eski sınıfları yerini. Özellikle, Instant
yerini alır java.util.Date
.
Date newDate = new Date();
newDate.setDate(newDate.getDate()+1);
System.out.println(newDate);
Sun Apr 30 16:25:33 CEST 2017
gelir Mon May 01 16:25:33 CEST 2017
. Yine de cesareti kırılmış bir çözüm. Yöntem sadece iyi bir nedenden dolayı kullanılmıyor, 2017'de de Date
sınıfa çok iyi alternatiflerimiz var .