我想在特定日期添加一天。我怎么能这样做?
Date dt = new Date();
现在我想在这个日期添加一天。
答案 0 :(得分:439)
鉴于Date dt
你有几种可能性:
解决方案1:您可以使用Calendar
类:
Date dt = new Date();
Calendar c = Calendar.getInstance();
c.setTime(dt);
c.add(Calendar.DATE, 1);
dt = c.getTime();
解决方案2 :由于Date
类的各种缺点,您应该认真考虑使用 Joda-Time library 。使用Joda-Time,您可以执行以下操作:
Date dt = new Date();
DateTime dtOrg = new DateTime(dt);
DateTime dtPlusOne = dtOrg.plusDays(1);
解决方案3:使用 Java 8 ,您还可以使用新的 JSR 310 API(受Joda-Time启发):< / p>
Date dt = new Date();
LocalDateTime.from(dt.toInstant()).plusDays(1);
答案 1 :(得分:62)
Date today = new Date();
Date tomorrow = new Date(today.getTime() + (1000 * 60 * 60 * 24));
Date有一个构造函数,使用自UNIX-epoch以来的毫秒数。 getTime() - 方法为您提供该值。因此,添加一天的毫秒数就可以了。如果你想定期进行这样的操作,我建议为这些值定义常量。
重要提示:在所有情况下都不正确。阅读下面的警告评论。
答案 2 :(得分:13)
正如Top回答中所提到的,从java 8开始可以做到:
Date dt = new Date();
LocalDateTime.from(dt.toInstant()).plusDays(1);
但这有时会导致DateTimeException
这样:
java.time.DateTimeException: Unable to obtain LocalDateTime from TemporalAccessor: 2014-11-29T03:20:10.800Z of type java.time.Instant
可以通过简单地传递时区来避免此异常:
LocalDateTime.from(dt.toInstant().atZone(ZoneId.of("UTC"))).plusDays(1);
答案 3 :(得分:12)
LocalDate.of( 2017 , Month.JANUARY , 23 )
.plusDays( 1 )
最好完全避开java.util.Date
课程。但是如果你必须这样做,你可以在麻烦的旧遗留日期时间类和现代java.time类之间进行转换。查看添加到旧类的新方法。
Instant
Instant
类接近等同于Date
,两者都是时间轴上的一个时刻。 Instant
解析为纳秒,而Date
则为毫秒。
Instant instant = myUtilDate.toInstant() ;
您可以为此添加一天,但请记住这一点在UTC中。因此,您不会考虑夏令时等异常情况。使用ChronoUnit
类指定时间单位。
Instant nextDay = instant.plus( 1 , ChronoUnit.DAYS ) ;
ZonedDateTime
如果您想精通时区,请指定ZoneId
以获得ZonedDateTime
。以continent/region
格式指定proper time zone name,例如America/Montreal
,Africa/Casablanca
或Pacific/Auckland
。切勿使用诸如EST
或IST
之类的3-4字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。
ZoneId z = ZoneId.of( "America/Montreal" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
ZonedDateTime zdtNextDay = zdt.plusDays( 1 ) ;
您还可以将您的时间段(一天)表示为Period
。
Period p = Period.ofDays( 1 ) ;
ZonedDateTime zdt = ZonedDateTime.now( z ).plus( p ) ;
您可能想要第二天的第一时刻。不要假设这一天从00:00:00开始。夏令时(DST)等异常表示该日可能在另一时间开始,例如01:00:00。让 java.time 确定该区域中该日期的第一天。
LocalDate today = LocalDate.now( z ) ;
LocalDate tomorrow = today.plus( p ) ;
ZonedDateTime zdt = tomorrow.atStartOfDay( z ) ;
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和&amp; SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。
更新:Joda-Time库现在处于维护模式。该团队建议迁移到java.time类。我将完整地留下这部分历史。
Joda-Time 2.3库使这种日期时间工作变得更加容易。与Java捆绑在一起的java.util.Date类非常麻烦,应该避免使用。
以下是一些示例代码。
您的java.util.Date将转换为Joda-Time DateTime对象。与j.u.Date不同,DateTime确实知道其指定的时区。时区是至关重要的,因为在明天增加一天以获得相同的wall-clock time可能意味着在美国Daylight Saving Time (DST)的情况下进行调整,例如23小时或25小时的日期。如果指定time zone,Joda-Time可以进行这种调整。添加一天后,我们将DateTime对象转换回java.util.Date对象。
java.util.Date yourDate = new java.util.Date();
// Generally better to specify your time zone rather than rely on default.
org.joda.time.DateTimeZone timeZone = org.joda.time.DateTimeZone.forID( "America/Los_Angeles" );
DateTime now = new DateTime( yourDate, timeZone );
DateTime tomorrow = now.plusDays( 1 );
java.util.Date tomorrowAsJUDate = tomorrow.toDate();
转储到控制台...
System.out.println( "yourDate: " + yourDate );
System.out.println( "now: " + now );
System.out.println( "tomorrow: " + tomorrow );
System.out.println( "tomorrowAsJUDate: " + tomorrowAsJUDate );
跑步时......
yourDate: Thu Apr 10 22:57:21 PDT 2014
now: 2014-04-10T22:57:21.535-07:00
tomorrow: 2014-04-11T22:57:21.535-07:00
tomorrowAsJUDate: Fri Apr 11 22:57:21 PDT 2014
答案 4 :(得分:10)
我找到了一个向Date对象添加任意时间的简单方法
Date d = new Date(new Date().getTime() + 86400000)
其中:
86 400 000ms = 1 Day : 24*60*60*1000
3 600 000ms = 1 Hour : 60*60*1000
答案 5 :(得分:9)
这会使任何日期增加一个
String untildate="2011-10-08";//can take any date in current format
SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyy-MM-dd" );
Calendar cal = Calendar.getInstance();
cal.setTime( dateFormat.parse(untildate));
cal.add( Calendar.DATE, 1 );
String convertedDate=dateFormat.format(cal.getTime());
System.out.println("Date increase by one.."+convertedDate);
答案 6 :(得分:9)
你可以在 import org.apache.commons.lang.time.DateUtils 之后使用这个方法:
DateUtils.addDays(new Date(), 1));
答案 7 :(得分:4)
使用DateTime对象obj.Add添加你想要的日期等等。 希望这有效:)
答案 8 :(得分:4)
我更喜欢joda日期和时间算术,因为它的可读性更好:
Date tomorrow = now().plusDays(1).toDate();
或者
endOfDay(now().plus(days(1))).toDate()
startOfDay(now().plus(days(1))).toDate()
答案 9 :(得分:4)
Java 8 LocalDate API
LocalDate.now().plusDays(1L);
答案 10 :(得分:3)
在非常特殊的情况下如果您要求自己开设日期课程,可能来自您的计算机编程教授;这种方法做得非常好。
public void addOneDay(){
int [] months = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
day++;
if (day> months[month-1]){
month++;
day = 1;
if (month > 12){
year++;
month = 1;
}
}
}
答案 11 :(得分:3)
最好用的东西:
long currenTime = System.currentTimeMillis();
long oneHourLater = currentTime + TimeUnit.HOURS.toMillis(1l);
同样,您可以添加MONTHS,DAYS,MINUTES等
答案 12 :(得分:3)
为了减少特定于java的触摸,基本原则是转换为某种线性日期格式,朱利安天,修改后的朱利安天,自某个时代以来的秒数等,添加你的一天,并转换回来。
这样做的原因是你将“闰日,闰秒等权利问题”解决给那些运气不好的人。
我会提醒您,正确地进行这些转换程序可能很困难。有很多不同的方式让人们搞砸了时间,最近一个高调的例子是MS的Zune。不要在MS上玩太多的乐趣,但很容易搞砸。有多种不同的时间格式,例如TAI vs TT。
答案 13 :(得分:2)
你想要在几天后找到这个代码的日期试试..
public Date getToDateAfterDays(Integer day) {
Date nowdate = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(nowdate);
cal.add(Calendar.DATE, day);
return cal.getTime();
}
答案 14 :(得分:2)
Java 8 Time API:
Instant now = Instant.now(); //current date
Instant after= now.plus(Duration.ofDays(300));
Date dateAfter = Date.from(after);
答案 15 :(得分:2)
Java 1.8版 为数据时间API提供了很好的更新。
以下是代码片段:
LocalDate lastAprilDay = LocalDate.of(2014, Month.APRIL, 30);
System.out.println("last april day: " + lastAprilDay);
LocalDate firstMay = lastAprilDay.plusDays(1);
System.out.println("should be first may day: " + firstMay);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd");
String formatDate = formatter.format(firstMay);
System.out.println("formatted date: " + formatDate);
<强> 输出: 强>
last april day: 2014-04-30
should be first may day: 2014-05-01
formatted date: 01
有关更多信息,请参阅此类的Java文档:
答案 16 :(得分:1)
你可以这样尝试java.util.Date
库 -
int no_of_day_to_add = 1;
Date today = new Date();
Date tomorrow = new Date( today.getYear(), today.getMonth(), today.getDate() + no_of_day_to_add );
根据需要更改no_of_day_to_add
的值。
我已将no_of_day_to_add
的值设置为1
,因为您只想添加一天。
更多信息可以在this documentation找到。