Pracuję z datą w formacie: yyyy-mm-dd
.
Jak mogę zwiększyć tę datę o jeden dzień?
Pracuję z datą w formacie: yyyy-mm-dd
.
Jak mogę zwiększyć tę datę o jeden dzień?
Odpowiedzi:
Coś takiego powinno załatwić sprawę:
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()
rzuci datę. Zobacz na ideone .
Java wydaje się być daleko w tyle za ósemką w porównaniu do C #. Ta metoda narzędzia pokazuje, jak to zrobić w Javie SE 6 za pomocą metody Calendar.add (przypuszczalnie jedyny łatwy sposób).
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();
}
}
Aby dodać jeden dzień, zgodnie z zadanym pytaniem, nazwij go w następujący sposób:
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
i java.text.SimpleDateFormat
są teraz spuścizną , wyparte przez klasy java.time wbudowane w Javę 8 i nowsze wersje . Zobacz samouczek Oracle .
W Javie 8 i nowszych pakiet java.time sprawia, że jest to prawie automatyczne. ( Samouczek )
Zakładając String
wejście i wyjście:
import java.time.LocalDate;
public class DateIncrementer {
static public String addOneDay(String date) {
return LocalDate.parse(date).plusDays(1).toString();
}
}
ZonedDateDateTime
a OffsetDateTime
także plusDays
i minusDays
metody, a takżeLocalDate
LocalDate
.
Wolę używać DateUtils z Apache. Sprawdź to http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/time/DateUtils.html . Jest to przydatne zwłaszcza, gdy musisz użyć go w wielu miejscach w swoim projekcie i nie chciałbyś do tego pisać jednej metody liniowej.
Interfejs API mówi:
addDays (Data, int liczba): Dodaje liczbę dni do daty zwracając nowy obiekt.
Zwróć uwagę, że zwraca nowy obiekt Date i nie wprowadza zmian w samym poprzednim.
Zbuduj obiekt kalendarza i użyj metody add (Calendar.DATE, 1);
Spójrz na Joda-Time ( https://www.joda.org/joda-time/ ).
DateTimeFormatter parser = ISODateTimeFormat.date();
DateTime date = parser.parseDateTime(dateString);
String nextDay = parser.print(date.plusDays(1));
Pamiętaj, że ten wiersz dodaje 24 godziny:
d1.getTime() + 1 * 24 * 60 * 60 * 1000
ale ta linia dodaje jeden dzień
cal.add( Calendar.DATE, 1 );
W dni ze zmianą czasu letniego (25 lub 23 godzin) otrzymasz różne wyniki!
Java 8 dodała nowy interfejs API do pracy z datami i godzinami.
W Javie 8 możesz użyć następujących wierszy kodu:
// 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)
nie date.plusDays(1)
.
możesz użyć Simple java.util lib
Calendar cal = Calendar.getInstance();
cal.setTime(yourDate);
cal.add(Calendar.DATE, 1);
yourDate = cal.getTime();
java.util.Date
, java.util.Calendar
i java.text.SimpleDateFormat
są teraz spuścizną , wyparte przez klasy java.time wbudowane w Javę 8 i nowsze wersje . Zobacz samouczek 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);
To da jutrzejszą datę. c.add(...)
parametry można zmienić z 1 na inną liczbę dla odpowiedniego przyrostu.
Date
ani Calendar
ponownie.
Jeśli używasz Java 8 , zrób to w ten sposób.
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
Jeśli chcesz użyć SimpleDateFormat , zrób to w ten sposób.
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
klasy LocalDateTime
.
long timeadj = 24*60*60*1000;
Date newDate = new Date (oldDate.getTime ()+timeadj);
Pobiera to liczbę milisekund od epoki ze starej daty i dodaje milisekundy o wartości 1 dzień, a następnie używa konstruktora publicznego Date () do utworzenia daty przy użyciu nowej wartości. Ta metoda pozwala dodać 1 dzień lub dowolną liczbę godzin / minut, nie tylko całe dni.
Ponieważ Java 1.5 TimeUnit.DAYS.toMillis (1) wygląda dla mnie bardziej czysto.
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
klasa w klasach java.time dla Java 8 i późniejszych oraz back-port do Java 6 i Java 7 znaleziony w projekcie ThreeTen-Backport .
W Javie 8 prosty sposób to:
Date.from(Instant.now().plusSeconds(SECONDS_PER_DAY))
Instant.now().plus( 1 , ChronoUnit.DAYS )
?
W java 8 możesz używać 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
Możesz przekształcić w java.util.Date
obiekt w następujący sposób.
Date date = Date.from(addedDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
Możesz sformatować LocalDate
w ciąg znaków w następujący sposób.
String str = addedDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
To bardzo proste, próbując wyjaśnić jednym słowem. uzyskaj dzisiejszą datę, jak poniżej
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());// print today's date
calendar.add(Calendar.DATE, 1);
Teraz ustaw datę z tą datą o jeden dzień za pomocą metody calendar.add, która przyjmuje (stała, wartość). Tutaj stałą może być DATA, godziny, min, s itd., A wartość jest wartością stałej. Podobnie jak w przypadku jednego dnia, stała z wyprzedzeniem to Calendar.DATE, a jej wartość to 1, ponieważ chcemy wartości z jednodniowym wyprzedzeniem.
System.out.println(calendar.getTime());// print modified date which is
jutrzejsza randka
Dzięki
Apache Commons ma już ten DateUtils.addDays (Data, liczba całkowita) http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/time/DateUtils.html#addDays%28java .util.Date,% 20int% 29, którego używasz lub możesz użyć JodaTime, aby uczynić go bardziej czystym.
Wystarczy podać datę w ciągu i liczbę kolejnych dni
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;
}
Jeśli chcesz dodać jedną jednostkę czasu i spodziewasz się, że inne pola również zostaną zwiększone, możesz bezpiecznie użyć metody add. Zobacz przykład poniżej:
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()));
Wydrukuje:
1970-12-31
1971-01-01
1970-12-31
startCalendar.add(Calendar.DATE, 1); //Add 1 Day to the current Calender
Calendar
klasy w 2019 r.
Jeśli używasz Java SE 8 lub nowszej wersji, powinieneś użyć nowego API Data / Czas
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);
Jeśli musisz przekonwertować z java.util.Date
na java.time.LocalDate
, możesz użyć tej metody.
public LocalDate asLocalDate(Date date) {
Instant instant = date.toInstant();
ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
return zdt.toLocalDate();
}
Jeśli używasz wersji wcześniejszej niż Java SE 8, radzę używać Joda-Time
Joda-Time zapewnia wysokiej jakości zamiennik klas daty i godziny Java i jest de facto standardową biblioteką daty i godziny Java przed wersją 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
części jest nieprawidłowy. Powinien być dd/MM/uuuu
równoważny z JodaTime.
Użyj DateFormat
interfejsu API, aby przekonwertować ciąg na obiekt Date, a następnie użyj Calendar
interfejsu API, aby dodać jeden dzień. Daj mi znać, jeśli chcesz konkretnych przykładów kodu, a ja mogę zaktualizować swoją odpowiedź.
Jeśli używasz Java 8 java.time.LocalDate
i java.time.format.DateTimeFormatter
możesz to zrobić dość prosto.
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()
aby wygenerować ciąg formatu rrrr-MM-dd (a jeśli nalegasz, pamiętaj, że mm
to minuta, kiedy MM
jest miesiąc).
Możesz użyć tego pakietu z „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
zajęć w 2018 roku to kiepska rada. Kłopotliwe stare klasy daty i czasu, takie jak java.util.Date
, java.util.Calendar
i java.text.SimpleDateFormat
są już starsze , wyparte przez klasy java.time wbudowane w Java 8 i Java 9. Zobacz samouczek Oracle . Zobacz inne odpowiedzi za pomocą LocalDate
klasy.
SimpleDateFormat
Klasa niestety wstrzykuje strefę czasową, w sposób dorozumiany stosowanie obowiązującego domyślną strefę JVM za. Tak więc wyniki tego kodu będą się różnić w zależności od bieżącej wartości domyślnej - i ta wartość domyślna może się zmienić w dowolnym momencie podczas działania.
To naprawdę proste. Jeden dzień zawiera 86400000 milisekund. Najpierw więc pobierasz bieżący czas w systemie z Systemu, System.currentTimeMillis()
dodając następnie 84000000 milisekund i użyj Date
klasy, aby wygenerować format daty A dla milisekund.
Przykład
String Today = new Date(System.currentTimeMillis()).toString();
String Dzisiaj będzie 2019-05-9
String Tommorow = new Date(System.currentTimeMillis() + 86400000).toString();
Jutro smyczkowe odbędzie się 10.10.2019
String DayAfterTommorow = new Date(System.currentTimeMillis() + (2 * 86400000)).toString();
String DayAfterTommorow będzie 11.05.2019
Date
klasy, która została wyparta lata temu przez współczesne klasy java.time . O wiele prostsze w użyciu:LocalDate.parse( "2019-01-23" ).plusDays( 1 )
Wyjaśnijmy przypadek użycia: chcesz wykonywać arytmetykę kalendarza i zaczynać / kończyć z java.util.Date .
Niektóre podejścia:
Rozważ użycie java.time.Instant :
Date _now = new Date();
Instant _instant = _now.toInstant().minus(5, ChronoUnit.DAYS);
Date _newDate = Date.from(_instant);
Date
nowoczesne klasy java.time , takie jak Instant
. W java.time zajęcia całkowicie wyprzeć klas starszych. W szczególności Instant
zastępuje java.util.Date
.
Date newDate = new Date();
newDate.setDate(newDate.getDate()+1);
System.out.println(newDate);
Sun Apr 30 16:25:33 CEST 2017
nadchodzi Mon May 01 16:25:33 CEST 2017
. Jednak wciąż jest to rozwiązanie zniechęcające. Nie tylko metoda jest przestarzała z dobrego powodu, ale także w 2017 roku mamy bardzo dobre alternatywy dla Date
klasy.