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.Calendare java.text.SimpleDateFormatora 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 Stringinput e output:
import java.time.LocalDate;
public class DateIncrementer {
static public String addOneDay(String date) {
return LocalDate.parse(date).plusDays(1).toString();
}
}
ZonedDateDateTimee OffsetDateTimeanche hanno plusDayse minusDaysmetodi, 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.Calendare java.text.SimpleDateFormatora 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.
Dateo di Calendarnuovo.
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
LocalDateclasse 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));
LocalDateclasse 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.Dateoggetto come segue.
Date date = Date.from(addedDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
È possibile formattare LocalDatein 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
Calendarclasse 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.Datea 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.timeparte non è corretto. Dovrebbe essere dd/MM/uuuuequivalente a quello di JodaTime.
Utilizzare l' DateFormatAPI per convertire la stringa in un oggetto Date, quindi utilizzare l' CalendarAPI 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.LocalDatee java.time.format.DateTimeFormatterpuoi 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 mmsono 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);
Dateclasse nel 2018 è un consiglio scadente. Le vecchie e problematiche classi data-ora come java.util.Date, java.util.Calendare java.text.SimpleDateFormatora sono legacy , soppiantate dalle classi java.time integrate in Java 8 e Java 9. Vedi Tutorial di Oracle . Vedi altre risposte usando la LocalDateclasse.
SimpleDateFormatclasse 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 Dateclasse 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
Dateclasse 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);
Datecon le moderne java.time classi come Instant. Le classi java.time soppiantano completamente le classi legacy. In particolare, Instantsostituisce java.util.Date.
Date newDate = new Date();
newDate.setDate(newDate.getDate()+1);
System.out.println(newDate);
Sun Apr 30 16:25:33 CEST 2017arriva 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 Dateclasse.