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);
在非常特殊的情况下,如果你要求自己上约会课,可能是你的计算机编程教授教的,这种方法会做得很好
Java1.8版本对数据时API进行了很好的更新 下面是一段代码: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文档: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);
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); } }
Java 8时间API:Current date: 2016-08-15 Date After 1 day : 2016-08-16
Java8LocalDateInstant now = Instant.now(); //current date Instant after= now.plus(Duration.ofDays(300)); Date dateAfter = Date.from(after);
我发现了一个简单的方法,可以向日期对象添加任意时间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