Eu estou trabalhando com uma data neste formato: yyyy-mm-dd
.
Como posso incrementar essa data em um dia?
Eu estou trabalhando com uma data neste formato: yyyy-mm-dd
.
Como posso incrementar essa data em um dia?
Respostas:
Algo assim deve fazer o truque:
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()
rolará a data. Veja no ideone .
Java parece estar bem atrás da bola oito em comparação com o C #. Este método utilitário mostra a maneira de fazer no Java SE 6 usando o método Calendar.add (presumivelmente a única maneira fácil).
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();
}
}
Para adicionar um dia, de acordo com a pergunta, chame da seguinte maneira:
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
estão agora legado , suplantado pelos java.time classes internas em Java 8 e posterior. Consulte o Tutorial da Oracle .
No Java 8 e posterior, o pacote java.time torna isso praticamente automático. ( Tutorial )
Assumindo String
entrada e saída:
import java.time.LocalDate;
public class DateIncrementer {
static public String addOneDay(String date) {
return LocalDate.parse(date).plusDays(1).toString();
}
}
ZonedDateDateTime
e OffsetDateTime
também têm plusDays
e minusDays
métodos, bem comoLocalDate
LocalDate
.
Eu prefiro usar o DateUtils do Apache. Verifique este http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/time/DateUtils.html . É útil, especialmente quando você precisa usá-lo em vários locais do seu projeto e não deseja escrever seu método de linha única para isso.
A API diz:
addDays (Data da data, valor int): Adiciona um número de dias a uma data retornando um novo objeto.
Observe que ele retorna um novo objeto Date e não faz alterações no próprio anterior.
Construa um objeto Calendar e use o método add (Calendar.DATE, 1);
Dê uma olhada no Joda-Time ( https://www.joda.org/joda-time/ ).
DateTimeFormatter parser = ISODateTimeFormat.date();
DateTime date = parser.parseDateTime(dateString);
String nextDay = parser.print(date.plusDays(1));
Observe que esta linha adiciona 24 horas:
d1.getTime() + 1 * 24 * 60 * 60 * 1000
mas essa linha adiciona um dia
cal.add( Calendar.DATE, 1 );
Em dias com mudança de horário de verão (25 ou 23 horas), você obtém resultados diferentes!
O Java 8 adicionou uma nova API para trabalhar com datas e horas.
Com o Java 8, você pode usar as seguintes linhas de código:
// 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)
não date.plusDays(1)
.
você pode usar a biblioteca java.util simples
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
estão agora legado , suplantado pelos java.time classes internas em Java 8 e posterior. Consulte o Tutorial da 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);
Isso dará a data de amanhã. c.add(...)
os parâmetros podem ser alterados de 1 para outro número para o incremento apropriado.
Date
ou de Calendar
novo.
Se você estiver usando o Java 8 , faça assim.
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 você deseja usar o SimpleDateFormat , faça assim.
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 não LocalDateTime
.
long timeadj = 24*60*60*1000;
Date newDate = new Date (oldDate.getTime ()+timeadj);
Isso leva o número de milissegundos desde a época de oldDate e adiciona 1 dia em milissegundos e usa o construtor público Date () para criar uma data usando o novo valor. Esse método permite adicionar 1 dia ou qualquer número de horas / minutos, não apenas dias inteiros.
Desde o Java 1.5, o TimeUnit.DAYS.toMillis (1) parece mais limpo para mim.
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 nas classes java.time para Java 8 e posterior, e a porta traseira para Java 6 e Java 7 encontrada no projeto ThreeTen-Backport .
No Java 8, a maneira mais simples de fazer é:
Date.from(Instant.now().plusSeconds(SECONDS_PER_DAY))
Instant.now().plus( 1 , ChronoUnit.DAYS )
?
No java 8 você pode usar 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
Você pode converter em java.util.Date
objeto da seguinte maneira.
Date date = Date.from(addedDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
Você pode formatar LocalDate
em uma String da seguinte maneira.
String str = addedDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
É muito simples, tentando explicar em uma palavra simples. obtenha a data de hoje como abaixo
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());// print today's date
calendar.add(Calendar.DATE, 1);
Agora defina um dia com esta data pelo método calendar.add, que leva (constante, valor). Aqui a constante pode ser DATE, horas, min, segundos etc. e value é o valor da constante. Como por um dia, a constante à frente é Calendar.DATE e seu valor é 1 porque queremos o valor de um dia à frente.
System.out.println(calendar.getTime());// print modified date which is
data de amanhã
obrigado
O Apache Commons já possui este DateUtils.addDays (data da data, valor total) http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/time/DateUtils.html#addDays%28java .util.Date,% 20int% 29 que você usa ou pode usar o JodaTime para torná-lo mais limpo.
Apenas passe a data em String e o número dos próximos dias
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 você deseja adicionar uma única unidade de tempo e espera que outros campos também sejam incrementados, é possível usar o método add com segurança. Veja o exemplo abaixo:
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()));
Irá imprimir:
1970-12-31
1971-01-01
1970-12-31
startCalendar.add(Calendar.DATE, 1); //Add 1 Day to the current Calender
Calendar
classe mal projetada e desatualizada em 2019.
Se você usa o Java SE 8 ou superior, deve usar a nova API de Data / Hora
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 você precisar converter de java.util.Date
para java.time.LocalDate
, poderá usar esse método.
public LocalDate asLocalDate(Date date) {
Instant instant = date.toInstant();
ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
return zdt.toLocalDate();
}
Se você estiver usando uma versão anterior ao Java SE 8, recomendo que você use o Joda-Time
O Joda-Time fornece uma substituição de qualidade para as classes de data e hora do Java e é a biblioteca de data e hora padrão de fato do Java anterior ao 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
peça está incorreto. Deve ser dd/MM/uuuu
equivalente ao JodaTime.
Use a DateFormat
API para converter a String em um objeto Data e, em seguida, use a Calendar
API para adicionar um dia. Deixe-me saber se você deseja exemplos de código específicos e posso atualizar minha resposta.
Se você estiver usando o Java 8 java.time.LocalDate
e java.time.format.DateTimeFormatter
puder fazer esse trabalho bem simples.
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()
para produzir a string no formato aaaa-MM-dd (e se você insistir, lembre-se de que mm
são alguns minutos enquanto MM
é o mês).
Você pode usar este pacote em "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
aula em 2018 é um péssimo conselho. As classes de idade problemáticos de data e hora, como java.util.Date
, java.util.Calendar
, e java.text.SimpleDateFormat
são agora legado , suplantado pelos java.time classes internas em Java 8 & Java 9. Consulte Tutorial pela Oracle . Veja outras respostas usando a LocalDate
classe.
SimpleDateFormat
classe infelizmente injeta um fuso horário, aplicando-se implicitamente zona padrão atual da JVM. Portanto, os resultados desse código variam de acordo com o padrão atual - e esse padrão pode mudar a qualquer momento durante o tempo de execução.
É simples, na verdade. Um dia contém 86400000 milliSeconds. Então, primeiro você obtém o horário atual em milissegundos do Sistema usando, em System.currentTimeMillis()
seguida, adicione os 84000000 milliSeconds e use a Date
Classe para gerar um formato de data A para os milissegundos.
Exemplo
String Today = new Date(System.currentTimeMillis()).toString();
String Today será 2019-05-9
String Tommorow = new Date(System.currentTimeMillis() + 86400000).toString();
String Tommorow será 2019-05-10
String DayAfterTommorow = new Date(System.currentTimeMillis() + (2 * 86400000)).toString();
O dia em que o dia de cordas chegar amanhã será 2019-05-11
Date
classe terrível que foi suplantada anos atrás pelas modernas classes java.time . Muito mais simples de usar, simplesmente:LocalDate.parse( "2019-01-23" ).plusDays( 1 )
Vamos esclarecer o caso de uso: você deseja fazer a aritmética do calendário e iniciar / terminar com um java.util.Date .
Algumas abordagens:
Considere usar java.time.Instant :
Date _now = new Date();
Instant _instant = _now.toInstant().minus(5, ChronoUnit.DAYS);
Date _newDate = Date.from(_instant);
Date
as modernas classes java.time , como Instant
. As classes java.time suplantam totalmente as classes herdadas. Instant
Substitui especificamente java.util.Date
.
Date newDate = new Date();
newDate.setDate(newDate.getDate()+1);
System.out.println(newDate);
Sun Apr 30 16:25:33 CEST 2017
vem Mon May 01 16:25:33 CEST 2017
. Ainda é uma solução desanimada. O método não é apenas obsoleto por um bom motivo, também em 2017 temos boas alternativas para a Date
classe.