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

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

如何将此日期增加一天?

1114840 次浏览

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

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

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

像这样的东西应该可以达到目的:

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

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

DateTimeFormatter parser = ISODateTimeFormat.date();


DateTime date = parser.parseDateTime(dateString);


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

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

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

但是这条线增加了一天

cal.add( Calendar.DATE, 1 );

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

更新(2021年5月):这是一个非常过时的老Java的答案。对于Java 8及以上版本,请参阅https://stackoverflow.com/a/20906602/314283

与c#相比,Java确实远远落后于八球。这个实用程序方法展示了在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);

我更喜欢使用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对象,并没有对前一个对象本身进行更改。

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

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使它更干净。

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更改为另一个数字,以进行适当的增量。

java.time

在Java 8及以后的版本中,java。时间包使得这个过程几乎是自动的。(# EYZ1)

假设String输入和输出:

import java.time.LocalDate;


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

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

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

 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;


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

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

如果您想添加一个时间单位,并且希望其他字段也增加,则可以安全地使用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

你可以使用简单的java。util自由

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

在java 8中,您可以使用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对象,如下所示。

Date date = Date.from(addedDate.atStartOfDay(ZoneId.systemDefault()).toInstant());

您可以将LocalDate格式化为一个字符串,如下所示。

String str = addedDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));

如果您使用的是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);
}

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

如果您正在使用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
这很简单,想用简单的话解释清楚。 获取今天的日期如下

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

现在把这个日期提前一天。添加参数为(常量,值)的方法。这里的constant可以是DATE, hours, min, sec等,value是常量的值。比如一天,前面的常数是日历。DATE和它的值是1,因为我们想要提前一天的值。

System.out.println(calendar.getTime());// print modified date which is明天的约会

谢谢

你可以使用"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);

在Java 8中简单的方法是:

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

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

一些方法:

  1. 转换为字符串并使用SimpleDateFormat返回:这是一个效率低下的解决方案。
  2. 转换为LocalDate:您将丢失任何时间的信息。
  3. 转换为LocalDateTime:这涉及更多步骤,您需要考虑时区。
  4. 使用Date.getTime ()转换为epoch:这是有效的,但您是以毫秒计算的。

考虑使用java.time.Instant:

Date _now = new Date();
Instant _instant = _now.toInstant().minus(5, ChronoUnit.DAYS);
Date _newDate = Date.from(_instant);
startCalendar.add(Calendar.DATE, 1); //Add 1 Day to the current Calender
其实很简单。 一天包含86400000毫秒。 因此,首先使用System.currentTimeMillis()从系统中获取当前时间,单位为毫厘 添加8000000毫秒,并使用Date类生成毫秒的日期格式

例子

# EYZ0

今天是2019-05-9

# EYZ0

明天将是2019-05-10

# EYZ0

字符串后天将是2019-05-11

对于Java SE 8或更高版本,您应该使用新的日期/时间的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/uuuu");
        

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

试试这个方法:

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

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

let d=new Date();
d.setTime(d.getTime()+86400000);
console.log(d);
这只是一行, 只有两个命令。 它适用于Date类型,不使用日历

我一直认为最好在代码端使用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);

它可以设置月、年和日,但可以扩展到小时、分钟和秒,也可以根据国家国旗在标准表示中使用。

你可以在一行中完成。

例如增加5天

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

减去5天

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

得票最高的答案使用遗留的java.util日期时间API,这在2009年被问到这个问题时是正确的做法。2014年3月,java.time API取代了容易出错的遗留日期时间API。从那时起,强烈建议使用这个现代日期-时间API。

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

不管你是用遗留的解析/格式化API还是现代一个,你都用错了这个月的字母。字母m用于minute-of-hour,而month-of-year的正确字母是M

yyyy-MM-ddjava.time.LocalDate的默认格式

java.time API基于ISO 8601标准,因此如果日期-时间字符串已经是ISO 8601格式,则不需要显式指定DateTimeFormatter来解析日期-时间字符串。类似地,java.time类型的toString实现返回ISO 8601格式的字符串。查看LocalDate#parseLocalDate#toString了解更多信息。

将本地日期增加一天的方法

有三种选择:

  1. LocalDate#plusDays(long daysToAdd)
  2. LocalDate#plus(long amountToAdd, TemporalUnit unit):它有一些额外的功能,例如,你可以用它来增加一个本地日期的天,周,月,年等。
  3. LocalDate#plus(TemporalAmount amountToAdd):您可以指定要添加的Period(或实现TemporalAmount的任何其他类型)。

# EYZ0:

import java.time.Instant;
import java.time.LocalDate;
import java.time.Period;
import java.time.temporal.ChronoUnit;


public class Main {
public static void main(String[] args) {
// Parsing
LocalDate ldt = LocalDate.parse("2020-10-20");
System.out.println(ldt);


// Incrementing by one day
LocalDate oneDayLater = ldt.plusDays(1);
System.out.println(oneDayLater);


// Alternatively
oneDayLater = ldt.plus(1, ChronoUnit.DAYS);
System.out.println(oneDayLater);


oneDayLater = ldt.plus(Period.ofDays(1));
System.out.println(oneDayLater);


String desiredString = oneDayLater.toString();
System.out.println(desiredString);
}
}

# EYZ0:

2020-10-20
2020-10-21
2020-10-21
2020-10-21
2020-10-21

如何从遗留API切换到现代日期时间API?

可以在java-util-date实例上使用Date#toInstant从传统的日期-时间API切换到现代的日期-时间API。一旦有了Instant,就可以很容易地获得其他日期-时间类型的java.time API。Instant表示时间中的一个时刻,与时区无关,即它表示UTC的日期-时间(通常显示为Z,代表zulu时间,ZoneOffset代表+00:00)。

# EYZ0:

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.util.Date;


public class Main {
public static void main(String[] args) {
Date date = new Date();
Instant instant = date.toInstant();
System.out.println(instant);


ZonedDateTime zdt = instant.atZone(ZoneId.of("Asia/Kolkata"));
System.out.println(zdt);


OffsetDateTime odt = instant.atOffset(ZoneOffset.of("+05:30"));
System.out.println(odt);
// Alternatively, using time-zone
odt = instant.atZone(ZoneId.of("Asia/Kolkata")).toOffsetDateTime();
System.out.println(odt);


LocalDateTime ldt = LocalDateTime.ofInstant(instant, ZoneId.of("Asia/Kolkata"));
System.out.println(ldt);
// Alternatively,
ldt = instant.atZone(ZoneId.of("Asia/Kolkata")).toLocalDateTime();
System.out.println(ldt);
}
}

# EYZ0:

2022-11-12T12:52:18.016Z
2022-11-12T18:22:18.016+05:30[Asia/Kolkata]
2022-11-12T18:22:18.016+05:30
2022-11-12T18:22:18.016+05:30
2022-11-12T18:22:18.016
2022-11-12T18:22:18.016

Trail: Date Time了解更多关于现代日期-时间API的信息。