我使用的日期格式为:yyyy-mm-dd。
如何将此日期增加一天?
我使用的日期格式为:yyyy-mm-dd。
如何将此日期增加一天?
当前回答
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使它更干净。
其他回答
试试这个方法:
public static Date addDay(int day) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DATE, day);
return calendar.getTime();
}
投票最多的答案是使用传统java。util date-time API,这在2009年被问到这个问题时是正确的。2014年3月,java。时间API取代了容易出错的传统日期时间API。从那时起,强烈建议使用这个现代日期-时间API。
我使用的日期格式为:yyyy-mm-dd
不管您使用的是传统的解析/格式化API还是现代的API,您都使用了错误的字母。字母m用于表示小时的分钟,而表示月份的正确字母是m。
“yyyy-MM-dd”为java.time.LocalDate的默认格式
java。时间API基于ISO 8601标准,因此如果日期-时间字符串已经是ISO 8601格式,则不需要显式指定DateTimeFormatter来解析日期-时间字符串。类似地,java的toString实现。time类型返回ISO 8601格式的字符串。查看LocalDate#parse和LocalDate#toString了解更多信息。
将本地日期增加一天的方法
有三种选择:
LocalDate # plusDays(长daysToAdd) LocalDate#plus(long amountToAdd, TemporalUnit unit):它有一些额外的功能,例如,你可以使用它来增加一个本地日期的天,周,月,年等。 LocalDate#plus(TemporalAmount amountToAdd):您可以指定一个Period(或任何其他实现TemporalAmount的类型)来添加。
演示:
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);
}
}
输出:
2020-10-20
2020-10-21
2020-10-21
2020-10-21
2020-10-21
如何从遗留API切换到现代日期时间API?
您可以在java-util-date实例上使用dat# toInstant从传统日期-时间API切换到现代日期-时间API。一旦拥有了Instant,就可以轻松获得其他日期-时间类型的java。时间的API。一个瞬间表示时间上的一个时刻,与时区无关,即它表示UTC的日期-时间(通常显示为Z,代表Zulu-time, ZoneOffset为+00:00)。
演示:
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);
}
}
输出:
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了解更多关于现代Date-Time API的信息。
在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"));
我更喜欢使用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对象,并没有对前一个对象本身进行更改。
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
Calendar cal = Calendar.getInstance();
cal.setTime( dateFormat.parse( inputString ) );
cal.add( Calendar.DATE, 1 );