Sto lavorando con una data in questo formato: yyyy-mm-dd
.
Come posso aumentare questa data di un giorno?
Sto lavorando con una data in questo formato: yyyy-mm-dd
.
Come posso aumentare questa data di un giorno?
Risposte:
Qualcosa del genere dovrebbe fare il trucco:
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()
scorrerà la data. Vedi su ideone .
Java sembra essere ben dietro l'ottava palla rispetto a C #. Questo metodo di utilità mostra il modo di fare in Java SE 6 usando il metodo Calendar.add (presumibilmente l'unico modo semplice).
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();
}
}
Per aggiungere un giorno, per la domanda posta, chiamalo come segue:
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
e java.text.SimpleDateFormat
ora sono legacy , soppiantate dalle classi java.time integrate in Java 8 e versioni successive. Vedi Tutorial di Oracle .
Su Java 8 e versioni successive, il pacchetto java.time lo rende praticamente automatico. ( Tutorial )
Supponendo String
input e output:
import java.time.LocalDate;
public class DateIncrementer {
static public String addOneDay(String date) {
return LocalDate.parse(date).plusDays(1).toString();
}
}
ZonedDateDateTime
e OffsetDateTime
anche hanno plusDays
e minusDays
metodi, nonchéLocalDate
LocalDate
.
Preferisco usare DateUtils da Apache. Controlla questo http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/time/DateUtils.html . È utile soprattutto quando devi usarlo in più punti del tuo progetto e non vorrai scrivere il tuo metodo one liner per questo.
L'API dice:
addDays (Data data, importo int): aggiunge un numero di giorni a una data che restituisce un nuovo oggetto.
Si noti che restituisce un nuovo oggetto Date e non modifica il precedente stesso.
Costruisci un oggetto Calendar e usa il metodo add (Calendar.DATE, 1);
Dai un'occhiata a Joda-Time ( https://www.joda.org/joda-time/ ).
DateTimeFormatter parser = ISODateTimeFormat.date();
DateTime date = parser.parseDateTime(dateString);
String nextDay = parser.print(date.plusDays(1));
Si noti che questa riga aggiunge 24 ore:
d1.getTime() + 1 * 24 * 60 * 60 * 1000
ma questa riga aggiunge un giorno
cal.add( Calendar.DATE, 1 );
Nei giorni con un cambio dell'ora legale (25 o 23 ore) otterrai risultati diversi!
Java 8 ha aggiunto una nuova API per lavorare con date e orari.
Con Java 8 è possibile utilizzare le seguenti righe di codice:
// 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)
non intendessi date.plusDays(1)
.
puoi usare 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
e java.text.SimpleDateFormat
ora sono legacy , soppiantate dalle classi java.time integrate in Java 8 e versioni successive. Vedi Tutorial di 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);
Questo darà la data di domani. c.add(...)
i parametri possono essere cambiati da 1 a un altro numero per l'incremento appropriato.
Date
o di Calendar
nuovo.
Se stai usando Java 8 , fallo in questo modo.
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
Se vuoi usare SimpleDateFormat , fallo in questo modo.
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
classe LocalDateTime
.
long timeadj = 24*60*60*1000;
Date newDate = new Date (oldDate.getTime ()+timeadj);
Questo richiede il numero di millisecondi dall'epoca di oldDate e aggiunge 1 giorno di millisecondi, quindi utilizza il costruttore pubblico Date () per creare una data utilizzando il nuovo valore. Questo metodo consente di aggiungere 1 giorno o qualsiasi numero di ore / minuti, non solo giorni interi.
Dal momento che Java 1.5 TimeUnit.DAYS.toMillis (1) mi sembra più pulito.
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
classe nelle classi java.time per Java 8 e successive, e il back-port per Java 6 e Java 7 trovato nel progetto ThreeTen-Backport .
In Java 8 un modo semplice per fare è:
Date.from(Instant.now().plusSeconds(SECONDS_PER_DAY))
Instant.now().plus( 1 , ChronoUnit.DAYS )
?
In java 8 puoi usare 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
È possibile convertire in java.util.Date
oggetto come segue.
Date date = Date.from(addedDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
È possibile formattare LocalDate
in una stringa come segue.
String str = addedDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
È molto semplice, cercando di spiegare in una parola semplice. ottieni la data di oggi come di seguito
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());// print today's date
calendar.add(Calendar.DATE, 1);
Ora imposta un giorno in anticipo con questa data con il metodo calendar.add che richiede (costante, valore). Qui la costante potrebbe essere DATA, ore, minuti, secondi ecc. E il valore è il valore della costante. Come per un giorno, la costante in anticipo è Calendar.DATE e il suo valore è 1 perché vogliamo un valore in anticipo di un giorno.
System.out.println(calendar.getTime());// print modified date which is
appuntamento di domani
Grazie
Apache Commons ha già questo DateUtils.addDays (Data, importo int) http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/time/DateUtils.html#addDays%28java .util.Date,% 20int% 29 che usi o potresti usare JodaTime per renderlo più pulito.
Basta passare la data in String e il numero dei prossimi giorni
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;
}
Se vuoi aggiungere una singola unità di tempo e prevedi che anche altri campi vengano incrementati, puoi tranquillamente usare il metodo add. Vedi l'esempio seguente:
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()));
Stampa:
1970-12-31
1971-01-01
1970-12-31
startCalendar.add(Calendar.DATE, 1); //Add 1 Day to the current Calender
Calendar
classe mal progettata e obsoleta nel 2019.
Se si utilizza Java SE 8 o versioni successive, è necessario utilizzare la nuova API Data / ora
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);
Se è necessario convertire da java.util.Date
a java.time.LocalDate
, è possibile utilizzare questo metodo.
public LocalDate asLocalDate(Date date) {
Instant instant = date.toInstant();
ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
return zdt.toLocalDate();
}
Se si utilizza una versione precedente a Java SE 8, ti consiglio di utilizzare Joda-Time
Joda-Time fornisce un sostituto di qualità per le classi di data e ora di Java ed è di fatto la libreria standard di data e ora per Java precedente a 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
parte non è corretto. Dovrebbe essere dd/MM/uuuu
equivalente a quello di JodaTime.
Utilizzare l' DateFormat
API per convertire la stringa in un oggetto Date, quindi utilizzare l' Calendar
API per aggiungere un giorno. Fammi sapere se vuoi esempi di codice specifici e posso aggiornare la mia risposta.
Se stai usando Java 8, java.time.LocalDate
e java.time.format.DateTimeFormatter
puoi renderlo abbastanza semplice.
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()
per produrre la stringa nel formato iyyy-MM-dd (e se insisti, ricorda che mm
sono minuti mentre MM
è il mese).
Puoi usare questo pacchetto da "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
classe nel 2018 è un consiglio scadente. Le vecchie e problematiche classi data-ora come java.util.Date
, java.util.Calendar
e java.text.SimpleDateFormat
ora sono legacy , soppiantate dalle classi java.time integrate in Java 8 e Java 9. Vedi Tutorial di Oracle . Vedi altre risposte usando la LocalDate
classe.
SimpleDateFormat
classe inietta purtroppo un fuso orario, applicando implicitamente zona predefinita corrente della JVM. Pertanto, i risultati di questo codice variano in base al valore predefinito corrente e tale valore predefinito può cambiare in qualsiasi momento durante il runtime.
In realtà è semplice. Un giorno contiene 86400000 milliSecondi. Quindi prima ottieni l'ora corrente in millis dal sistema usando System.currentTimeMillis()
quindi aggiungi 84000000 milliSeconds e usa la Date
classe per generare un formato data per i millisecondi.
Esempio
String Today = new Date(System.currentTimeMillis()).toString();
String Today sarà il 09-05-2019
String Tommorow = new Date(System.currentTimeMillis() + 86400000).toString();
String Tommorow sarà il 10-05-2019
String DayAfterTommorow = new Date(System.currentTimeMillis() + (2 * 86400000)).toString();
String DayAfterTommorow sarà l'11 / 05/2019
Date
classe che è stata soppiantata anni fa dalle moderne classi java.time . Molto più semplice da usare semplicemente:LocalDate.parse( "2019-01-23" ).plusDays( 1 )
Chiariamo il caso d'uso: vuoi fare l'aritmetica del calendario e iniziare / finire con un java.util.Date .
Alcuni approcci:
Prendi in considerazione l'utilizzo di java.time.Instant :
Date _now = new Date();
Instant _instant = _now.toInstant().minus(5, ChronoUnit.DAYS);
Date _newDate = Date.from(_instant);
Date
con le moderne java.time classi come Instant
. Le classi java.time soppiantano completamente le classi legacy. In particolare, Instant
sostituisce java.util.Date
.
Date newDate = new Date();
newDate.setDate(newDate.getDate()+1);
System.out.println(newDate);
Sun Apr 30 16:25:33 CEST 2017
arriva Mon May 01 16:25:33 CEST 2017
. È comunque una soluzione scoraggiata. Non solo il metodo è deprecato per una buona ragione, anche nel 2017 abbiamo ottime alternative alla Date
classe.