如何添加一天的date?
我想添加一天到一个特定的date。 我怎样才能做到这一点?
Date dt = new Date();
现在我想添加一天到这个date。
鉴于Date dt
你有几种可能性:
解决scheme1:您可以使用以下Calendar
类:
Date dt = new Date(); Calendar c = Calendar.getInstance(); c.setTime(dt); c.add(Calendar.DATE, 1); dt = c.getTime();
解决scheme2:由于Date
类的各种缺点,您应该认真考虑使用Joda-Time库 。 随着乔达时间,你可以做到以下几点:
Date dt = new Date(); DateTime dtOrg = new DateTime(dt); DateTime dtPlusOne = dtOrg.plusDays(1);
解决scheme3:使用Java 8,您还可以使用新的JSR 310 API(受Joda-Time的启发):
LocalDateTime.from(dt.toInstant()).plusDays(1);
Date today = new Date(); Date tomorrow = new Date(today.getTime() + (1000 * 60 * 60 * 24));
date有一个构造函数使用自UNIX时代以来的毫秒数。 getTime()方法为您提供了该值。 所以加一毫秒一天,就有窍门了。 如果你想定期做这样的操作,我推荐为这些值定义常量。
重要提示:在所有情况下都不正确。 阅读下面的WARNING注释。
我会小心使用
Date today = new Date(); Date tomorrow = new Date(today.getTime() + (1000 * 60 * 60 * 24));
如果您使用带日间节省的Calendar Timezone
,则在从夏季到冬季不断变化的一天中,不会跳到第二天。
这将会增加任何一个date
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);
正如在顶部的答案中所提到的,因为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)
通过简单地传递时区可以避免这个exception:
LocalDateTime.from(dt.toInstant().atZone(ZoneId.of("UTC"))).plusDays(1);
更新: Joda-Time库现在处于维护模式。 团队build议迁移到java.time类。
java.time
LocalDate.of( 2017 , Month.JANUARY , 23 ) .plusDays( 1 )
最好避免java.util.Date
类。 但是,如果你必须这样做,你可以在麻烦的旧的遗留date时间类和现代的java.time类之间进行转换。 寻找新的方法添加到旧的类。
Instant
课,接近相当于Date
,都是时间线上的一刻。 Instant
parsing为毫微秒,而Date
为毫秒。
Instant instant = myUtilDate.toInstant() ;
你可以添加一个这样的日子,但请记住这在UTC。 所以你不会调整夏令时等exception情况。 使用ChronoUnit
类指定时间单位。
Instant nextDay = instant.plus( 1 , ChronoUnit.DAYS ) ;
如果你想精通时区,指定一个ZoneId
来获得一个ZonedDateTime
。
ZoneId z = ZoneId.of( "America/Montreal" ) ; ZonedDateTime zdt = instant.atZone( z ) ; ZonedDateTime zdtNextDay = zdt.plusDays( 1 ) ;
乔达时间
Joda-Time 2.3库使得这种date时间工作更容易。 与Java捆绑在一起的java.util.Date类出了名的麻烦,应该避免。
这里是一些示例代码。
你的java.util.Date被转换成一个Joda-Time DateTime对象。 与juDate不同,DateTime真正知道它指定的时区。 时区是至关重要的,因为明天增加一天的时间以获得相同的挂钟时间可能意味着在美国夏令时(Daylight Saving Time,DST)的情况下进行诸如23小时或25小时的调整。 如果您指定时区 ,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
使用DateTime对象obj.Add添加任何你想要的一天小时等等希望这工作:)
为了使它更less一些java的具体,基本的原则将是转换为一些线性date格式,朱连天,修改朱连天,从某个时代开始秒,等,添加你的一天,并转换回来。
这样做的原因是,你们把“飞跃日,闰秒等等”问题排除在外,有些人运气好,没有把这个问题搞砸。
我会告诫你,正确地获得这些转换例程可能很困难。 有很多不同的方式,人们搞乱了时间,最近高调的例子是MS的Zune。 不要在MS上打太多的乐趣,这很容易搞砸。 TAI vs TT有多种不同的时间格式。
我更喜欢joda的date和时间算术,因为它更好的可读性:
Date tomorrow = now().plusDays(1).toDate();
要么
endOfDay(now().plus(days(1))).toDate() startOfDay(now().plus(days(1))).toDate()
最好的东西使用:
long currenTime = System.currentTimeMillis(); long oneHourLater = currentTime + TimeUnit.HOURS.toMillis(1l);
同样,你可以添加MONTHS,DAYS,MINUTES等
你可以在导入org.apache.commons.lang.time.DateUtils后使用这个方法:
DateUtils.addDays(new Date(), 1));
在非常特殊的情况下,如果您要求自己做date课程,可能是您的计算机编程教授; 这个方法会做得很好。
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; } } }
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文档:
- LOCALDATE的
- DateTimeFormatter
你想在天后find这个代码试试..
public Date getToDateAfterDays(Integer day) { Date nowdate = new Date(); Calendar cal = Calendar.getInstance(); cal.setTime(nowdate); cal.add(Calendar.DATE, day); return cal.getTime(); }
我发现一个简单的方法来添加任意时间到一个Date对象
Date d = new Date(new Date().getTime() + 86400000)
哪里:
86400000是1毫秒
3600000是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
值no_of_day_to_add
1
因为你只需要一天就可以添加。
更多可以在这个文件中find。
我会告诉你如何在Java 8中做到这一点。 干得好:
public class DemoDate { public static void main(String[] args) { LocalDate today = LocalDate.now(); System.out.println("Current date: " + today); //add 1 day to the current date LocalDate date1Day = today.plus(1, ChronoUnit.DAYS); System.out.println("Date After 1 day : " + date1Day); } }
输出:
Current date: 2016-08-15 Date After 1 day : 2016-08-16
Java 8 LocalDate API
LocalDate.now().plusDays(1L);
Java 8时间API:
Instant now = Instant.now(); //current date Instant after= now.plus(Duration.ofDays(300)); Date dateAfter = Date.from(after);