Java 如何为日期添加一天?

Java 如何为日期添加一天?,java,datetime,Java,Datetime,我想在一个特定的日期加上一天。我该怎么做 Date dt = new Date(); 现在我想给这个日期加上一天。给定一个日期dt您有几种可能性: 解决方案1:您可以使用Calendar类: Date dt = new Date(); Calendar c = Calendar.getInstance(); c.setTime(dt); c.add(Calendar.DATE, 1); dt = c.getTime(); 强>解决方案2:你应该认真考虑使用 ,因为日期类的各种缺点。使用J

我想在一个特定的日期加上一天。我该怎么做

Date dt = new Date();

现在我想给这个日期加上一天。

给定一个日期dt您有几种可能性:

解决方案1:您可以使用
Calendar
类:

Date dt = new Date();
Calendar c = Calendar.getInstance(); 
c.setTime(dt); 
c.add(Calendar.DATE, 1);
dt = c.getTime();
<>强>解决方案2:你应该认真考虑使用<强> <强>,因为<代码>日期<代码>类的各种缺点。使用Joda Time,您可以执行以下操作:

Date dt = new Date();
DateTime dtOrg = new DateTime(dt);
DateTime dtPlusOne = dtOrg.plusDays(1);
解决方案3:使用Java8还可以使用新的JSR310API(受Joda Time的启发):


要使其成为一个不太特定于java的版本,基本原则是将其转换为一些线性日期格式,如julian days、修改后的julian days、某个纪元后的秒数等,添加您的日期,然后再转换回来

这样做的原因是,你把“让闰日、闰秒等正确”的问题转嫁给了一个幸运的人,他没有把这个问题搞砸

我要提醒你的是,把这些转换程序做好可能会很困难。有很多不同的方式让人们浪费时间,最近一个引人注目的例子是微软的Zune。不过,不要对微软开太多玩笑,它很容易搞乱。有多种不同的时间格式,比如说TAI和TT,这都没有帮助

Date today = new Date();
Date tomorrow = new Date(today.getTime() + (1000 * 60 * 60 * 24));
Date有一个构造函数,它使用自UNIX纪元以来的毫秒数。getTime()-方法会给出该值。因此,为一天添加毫秒数就可以了。如果您想定期执行此类操作,我建议为这些值定义常量


重要提示:这并非在所有情况下都是正确的。请阅读下面的警告注释。

使用DateTime对象obj.Add添加您想要的任何一天、一小时等。
希望这能起作用:)

这将使任何日期增加一个

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);
我更喜欢日期和时间算术,因为它可读性更好:

Date tomorrow = now().plusDays(1).toDate();

太长,读不下去了 java.time 最好完全避免类。但如果必须这样做,可以在麻烦的旧遗留日期时间类和现代java.time类之间进行转换。寻找添加到旧类中的新方法

Instant
该类几乎等同于
Date
,两者都是时间线上的一个瞬间。
Instant
解析为纳秒,而
Date
解析为毫秒

Instant instant = myUtilDate.toInstant() ;
您可以在此基础上添加一天,但请记住UTC中的这一点。因此,您不会考虑夏令时等异常情况。请指定类的时间单位

ZoneDateTime
如果您想熟悉时区,请指定一个
ZoneId
以获得一个
ZoneDateTime
。以
大陆/地区
的格式指定一个,例如,或
太平洋/奥克兰
。切勿使用3-4个字母的缩写,例如
EST
IST
,因为它们不是真正的时区,不是标准化的nd甚至不是唯一的(!)

您还可以将要添加的时间跨度(一天)表示为
期间

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 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和解释。规范为

您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*
classes

从哪里获得java.time类

  • 然后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类

    • 对于早期的Android(,如顶部答案中所述,由于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);
      

      在非常特殊的情况下,如果你要求自己上约会课,可能是你的计算机编程教授教的,这种方法会做得很好

      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;
              }
          }
      }
      
      Java1.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);
      
      输出:

      有关更多信息,请参阅此类的Java文档:

      最佳使用方法:

            long currenTime = System.currentTimeMillis();
            long oneHourLater = currentTime + TimeUnit.HOURS.toMillis(1l);
      

      类似地,您可以添加月、日、分钟等

      您可以在导入org.apache.commons.lang.time.DateUtils后使用此方法:

      DateUtils.addDays(new Date(), 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\u of_day\u的值更改为\u add

      我已将
      no\u of_day\u的值设置为\u add
      1
      ,因为您只需要添加一天


      可以在中找到更多信息。

      您希望在天之后找到此代码的日期重试

      public Date getToDateAfterDays(Integer day) {
              Date nowdate = new Date();
              Calendar cal = Calendar.getInstance();
              cal.setTime(nowdate);
              cal.add(Calendar.DATE, day);
              return cal.getTime();
          }
      

      我将向您展示如何在Java8中实现这一点

      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时间API:

      Instant now = Instant.now(); //current date
      Instant after= now.plus(Duration.ofDays(300));
      Date dateAfter = Date.from(after);
      
      Java8LocalDate


      LocalDate.now().plusDays(1L);

      我发现了一个简单的方法,可以向日期对象添加任意时间

      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
      

      从性能的角度来看,解决方案非常复杂。+1这不适用于闰年。性能也不重要?如果你必须在许多实例上进行这些计算,这是非常昂贵的
      DateUtils.addDays(new Date(), 1);
      
      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 );
      
      public Date getToDateAfterDays(Integer day) {
              Date nowdate = new Date();
              Calendar cal = Calendar.getInstance();
              cal.setTime(nowdate);
              cal.add(Calendar.DATE, day);
              return cal.getTime();
          }
      
      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
      
      Instant now = Instant.now(); //current date
      Instant after= now.plus(Duration.ofDays(300));
      Date dateAfter = Date.from(after);
      
      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