Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不使用日历的情况下使用日期添加天数_Java_Date - Fatal编程技术网

Java 如何在不使用日历的情况下使用日期添加天数

Java 如何在不使用日历的情况下使用日期添加天数,java,date,Java,Date,所以我创建了一个名为XDate的类,它扩展了java.util.Date,但做的事情略有不同,例如,getMonth返回的值是1-12,而不是0-11, 现在,我想创建一个名为addDaysint a的函数,它基本上使用当前日期。可以在构造函数中编辑日期,并使用date.getTime和以毫秒为单位的日期构造函数将数字a添加到日期部分。只要XDate始终以UTC时区表示日期和时间,您只需将86400000添加到表示自历元时间1970-01-01 00:00以来毫秒的内部时间值 只要您想使用表示不

所以我创建了一个名为XDate的类,它扩展了java.util.Date,但做的事情略有不同,例如,getMonth返回的值是1-12,而不是0-11, 现在,我想创建一个名为addDaysint a的函数,它基本上使用当前日期。可以在构造函数中编辑日期,并使用date.getTime和以毫秒为单位的日期构造函数将数字a添加到日期部分。

只要XDate始终以UTC时区表示日期和时间,您只需将86400000添加到表示自历元时间1970-01-01 00:00以来毫秒的内部时间值

只要您想使用表示不同时区的日期和时间的日期,您就不能这样做,因为如果所讨论的时区有夏令时,则有23小时的天数或25小时的天数。在这种情况下,您需要跟踪这些更改发生的日期,并相应地进行处理

或者改用日历。

tl;博士 java.time 您正在使用糟糕的日期时间类,这些类在几年前被采用JSR310的java.time类所取代。不要再使用日期

显然,从UTC 1970年的第一个时刻开始,即1970-01-01T00:00:00Z,开始的时间长达毫秒。将该数字解析为一个瞬间,即UTC中分辨率为纳秒的瞬间

LocalDate
.now( 
    ZoneId.of( "Pacific/Auckland" ) 
)
.plusDays( 3 ) 
当你说“增加天数”时,你的确切意思是什么

你是说24小时的时间段吗?使用持续时间

你是指日历上的日期吗?时区对于确定日期至关重要。在任何一个特定的时刻,世界各地的日期都因地区而异。例如,中午夜后几分钟是新的一天,而中仍然是“昨天”

如果未指定时区,JVM将隐式应用其当前默认时区。该默认值可能在运行时出现!,因此,您的结果可能会有所不同。最好将所需/预期时区明确指定为参数。如果关键,请与用户确认区域

以大陆/地区的格式指定,如美洲/蒙特利尔、非洲/卡萨布兰卡或太平洋/奥克兰。切勿使用2-4个字母的缩写,如EST或IST,因为它们不是真正的时区,不标准,甚至不是唯一的

Duration d = Duration.ofDays( 3 ) ;  // Add three multiplied by 24 hours.
Instant instantLater = instant.plus( d ) ;
如果只需要不带时间和时区的日期,请提取LocalDate

基本上使用当前日期

如果只想以日期开始,请使用LocalDate.now

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

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

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

从哪里获得java.time类

、和更高版本-标准Java API的一部分,带有捆绑实现。 Java9添加了一些次要功能和修复。 和 大多数java.time功能都在中向后移植到Java6和Java7。 更高版本的Android捆绑包实现了java.time类。
对于早期的Android,请提供一些示例代码,并向我们展示尚不清楚的地方。顺便说一句,重新定义getMonth的返回值显然违反了liskow定律。我郑重建议您使用日历而不是日期。自Java 1.1!以来,这些日期方法已被弃用!。除此之外,像这样重新定义getMonth的返回值是对Liskow定律的公然违反。希望这不会出现在生产中,如果你在其他人必须维护的代码中使用它,他们或他们的继任者可能最终会删除它并重构所有依赖它的代码。不要这样做。学习并使用现有的java.time API。
Instant instant = Instant.ofEpochMilli( myCountOfMilliseconds ) ;
Duration d = Duration.ofDays( 3 ) ;  // Add three multiplied by 24 hours.
Instant instantLater = instant.plus( d ) ;
ZoneId z = ZoneId.of( "America/Montreal" ) ;  
ZonedDateTime zdt = instant.atZone( z ) ;
ZonedDateTime zdtLater = zdt.plusDays( 3 ) ;  // Add three calendar days, with same time-of-day but adjusted as needed to handle anomalies such as Daylight Saving Time (DST).
LocalDate ld = zdt.toLocalDate() ;
LocalDate ldLater = ld.plusDays( 3 ) ;
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
LocalDate today = LocalDate.now( z ) ;
LocalDate threeDaysFromToday = today.plusDays( 3 ) ;