如何在Java中将日期增加一天?

时间:2009-01-09 17:20:09

标签: java date

我正在使用此格式的日期:yyyy-mm-dd

如何将此日期增加一天?

32 个答案:

答案 0 :(得分:643)

这样的事情可以解决问题:

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

答案 1 :(得分:191)

与C#相比,Java似乎远远落后于八球。此实用程序方法使用Calendar.add method(可能是唯一简单的方法)显示了在Java SE 6中的方法。

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();
    }
}

要根据提出的问题添加一天,请按以下方式调用:

String sourceDate = "2012-02-29";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date myDate = format.parse(sourceDate);
myDate = DateUtil.addDays(myDate, 1);

答案 2 :(得分:66)

java.time

在Java 8及更高版本中,java.time package使其非常自动化。 (Tutorial

假设String输入和输出:

import java.time.LocalDate;

public class DateIncrementer {
  static public String addOneDay(String date) {
    return LocalDate.parse(date).plusDays(1).toString();
  }
}

答案 3 :(得分:61)

我更喜欢使用Apache的 DateUtils 。检查此http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/time/DateUtils.html。它非常方便,尤其是当您必须在项目中使用多个位置时,并且不希望为此编写单线方法。

API说:

  

addDays(Date date,int amount):在返回新对象的日期中添加若干天。

请注意,它返回一个新的Date对象,并且不会对前一个对象进行更改。

答案 4 :(得分:57)

SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
Calendar cal = Calendar.getInstance();
cal.setTime( dateFormat.parse( inputString ) );
cal.add( Calendar.DATE, 1 );

答案 5 :(得分:46)

构造一个Calendar对象并使用方法add(Calendar.DATE,1);

答案 6 :(得分:41)

看看Joda-Time(https://www.joda.org/joda-time/)。

DateTimeFormatter parser = ISODateTimeFormat.date();

DateTime date = parser.parseDateTime(dateString);

String nextDay = parser.print(date.plusDays(1));

答案 7 :(得分:39)

请注意,这一行增加了24小时:

d1.getTime() + 1 * 24 * 60 * 60 * 1000

但这一行增加了一天

cal.add( Calendar.DATE, 1 );

在夏令时变化(25或23小时)的日子里,你会得到不同的结果!

答案 8 :(得分:39)

Java 8添加了一个用于处理日期和时间的新API。

使用Java 8,您可以使用以下代码行:

// parse date from yyyy-mm-dd pattern
LocalDate januaryFirst = LocalDate.parse("2014-01-01");

// add one day
LocalDate januarySecond = januaryFirst.plusDays(1);

答案 9 :(得分:27)

您可以使用Simple java.util lib

Calendar cal = Calendar.getInstance(); 
cal.setTime(yourDate); 
cal.add(Calendar.DATE, 1);
yourDate = cal.getTime();

答案 10 :(得分:23)

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);

这将是明天的日期。 c.add(...)参数可以从1更改为另一个数字以进行适当的增量。

答案 11 :(得分:17)

如果您使用的是 Java 8 ,请按照这样做。

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 ,请按照这样做。

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

答案 12 :(得分:15)

long timeadj = 24*60*60*1000;
Date newDate = new Date (oldDate.getTime ()+timeadj);

这将从oldDate获取epoch以来的毫秒数,并添加1天毫秒,然后使用Date()公共构造函数使用新值创建日期。此方法允许您添加1天或任何小时/分钟,而不仅仅是整天。

答案 13 :(得分:14)

由于 Java 1.5 TimeUnit.DAYS.toMillis(1)对我来说看起来更干净。

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));

答案 14 :(得分:9)

在Java 8中,简单的方法是:

Date.from(Instant.now().plusSeconds(SECONDS_PER_DAY))

答案 15 :(得分:9)

在java 8中,您可以使用page.evaluate(function() { var s = new XMLSerializer(); return s.serializeToString(document.getElementById('div')); });

$_SERVER["REMOTE_ADDR"]

您可以按如下方式转换为$remoteIp = $_SERVER['REMOTE_ADDR']; if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) { $remoteIp = array_pop(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])); } 对象。

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

答案 16 :(得分:9)

这很简单,试着用一个简单的词来解释。 得到今天的日期如下

Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime());// print today's date
calendar.add(Calendar.DATE, 1);

现在提前一天使用calendar.add方法设置此日期,该方法采用(常量,值)。这里的常数可以是DATE,hours,min,sec等,而value是常量的值。就像有一天一样,前面的常量是Calendar.DATE,它的值是1,因为我们想要提前一天的值。

{p> System.out.println(calendar.getTime());// print modified date which is明天的日期

由于

答案 17 :(得分:7)

Apache Commons已经使用了你使用的DateUtils.addDays(Date date,int amount)http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/time/DateUtils.html#addDays%28java.util.Date,%20int%29,或者你可以使用JodaTime来使它更清洁。

答案 18 :(得分:7)

只需在字符串中传递日期和下一天的数量

 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;

}

答案 19 :(得分:7)

如果您想添加一个单位时间,并且您希望其他字段也增加,您可以安全地使用add方法。见下面的例子:

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()));

将打印:

1970-12-31
1971-01-01
1970-12-31

答案 20 :(得分:5)

使用DateFormat API将String转换为Date对象,然后使用Calendar API添加一天。如果您需要特定的代码示例,请告诉我,我可以更新我的答案。

答案 21 :(得分:3)

如果您使用的是Java 8,java.time.LocalDatejava.time.format.DateTimeFormatter可以使这项工作变得非常简单。

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); 
}

答案 22 :(得分:3)

您可以使用“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);  

答案 23 :(得分:3)

试试这个方法:

public static Date addDay(int day) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        calendar.add(Calendar.DATE, day);
        return calendar.getTime();
}

答案 24 :(得分:2)

让我们澄清一下用例:您要进行日历算术并以java.util.Date开始/结束。

一些方法:

  1. 使用SimpleDateFormat转换为字符串然后返回:这是一种无效的解决方案。
  2. 转换为LocalDate:您将丢失任何时间信息。
  3. 转换为LocalDateTime:这涉及更多步骤,您需要担心时区问题。
  4. 使用Date.getTime()转换为纪元:这是有效的方法,但计算的时间是毫秒。

考虑使用java.time.Instant

Date _now = new Date();
Instant _instant = _now.toInstant().minus(5, ChronoUnit.DAYS);
Date _newDate = Date.from(_instant);

答案 25 :(得分:2)

startCalendar.add(Calendar.DATE, 1); //Add 1 Day to the current Calender

答案 26 :(得分:2)

如果您使用Java SE 8或更高版本,则应使用新的Date/Time API

 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);

如果必须从java.util.Date转换为java.time.LocalDate,则可以使用此方法。

  public LocalDate asLocalDate(Date date) {
      Instant instant = date.toInstant();
      ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
      return zdt.toLocalDate();
  }

如果您使用的是Java SE 8之前的版本,建议您使用Joda-Time

  

Joda-Time提供了Java日期和时间的高质量替代品   类,并且是Java的事实上的标准日期和时间库   Java SE 8之前的版本

   int days = 7;       
   DateTime dateRedeemed = DateTime.now();
   DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/YYYY");

   String newDate = dateRedeemed.plusDays(days).toString(formatter);   
   System.out.println(newDate);

答案 27 :(得分:1)

实际上很简单。 一天包含86400000毫秒。 因此,首先您可以使用System.currentTimeMillis()从The System获取以毫秒为单位的当前时间,然后 添加84000000 milliSeconds并使用Date类生成毫秒的日期格式。

示例

String Today = new Date(System.currentTimeMillis()).toString();

今天的字符串将是2019-05-9

String Tommorow = new Date(System.currentTimeMillis() + 86400000).toString();

String Tommorow将在2019-05-10

String DayAfterTommorow = new Date(System.currentTimeMillis() + (2 * 86400000)).toString();

String DayAfterTommorow将在2019-05-11

答案 28 :(得分:0)

Date newDate = new Date();
newDate.setDate(newDate.getDate()+1);
System.out.println(newDate);

答案 29 :(得分:0)

我认为最快的,永远不会被弃用的,它是进入核心的

let d=new Date();
d.setTime(d.getTime()+86400000);
console.log(d);

只有一行, 并且只有 2 个命令。 它适用于日期类型,不使用日历。

我一直认为最好在代码方面使用 unix 时间,并在它准备好向用户显示时显示日期。

要打印日期 d,我使用

let format1 = new Intl.DateTimeFormat('en', { year: 'numeric', month: 'numeric', month: '2-digit', day: '2-digit'});
let [{ value: month },,{ value: day },,{ value: year }] = format1.formatToParts(d);

它设置 vars 月年和日,但可以扩展到小时分和秒,也可以用于标准表示中,具体取决于国家/地区。

答案 30 :(得分:0)

您可以在一行中完成此操作。

例如增加 5 天

Date newDate = Date.from(Date().toInstant().plus(5, ChronoUnit.DAYS));

减去5天

Date newDate = Date.from(Date().toInstant().minus(5, ChronoUnit.DAYS));

答案 31 :(得分:0)

在 Kotlin 中,您可以使用这 2 个函数来获取当前日期和未来日期。

fun getCurrentDate(): String {
    val currentDate = Calendar.getInstance().time
    val dateFormat = SimpleDateFormat("yyyy-dd-MM", Locale.getDefault())
    return dateFormat.format(currentDate)
}

fun incrementBy(days: Int): String {
    val dateFormat = SimpleDateFormat("yyyy-dd-MM", Locale.getDefault())

    val cal = Calendar.getInstance()
    cal.time = dateFormat.parse(getCurrentDate())
    cal.add(Calendar.DATE, days)

    return dateFormat.format(cal.time)
}

通过调用getCurrentDate(),输出为

<块引用>

2021-26-07

并通过调用 incrementBy(3),输出为

<块引用>

2021-29-07