java – 从joda中减去/添加时间

例如,我知道joda的DateTime类中的.minusDays(int)和.plus(int)方法.

但是当我使用joda持续时间时,没有特定的时间点,是否有一种简单而好的方法来减去或添加特定的时间,比如一天?

就像是:

new Duration(startTime, endTime).minusDays(2);

解决方法:

TL;博士

Joda-Time提供方法Duration::plus& Duration::minus.

myDuration.minus(                // A span of time unattached to the timeline. Consists of a number of milliseconds.
    Duration.standardDays( 2 )   // Generic 24-hour days.
)

最好迁移到java.time:

myDuration.minus(                // A span of time unattached to the timeline. Consists of a number of whole seconds plus a number of nanoseconds.
    Duration.ofDays( 2 )         // Generic 24-hour days.
)

没有天

Duration(startTime, endTime).minusDays(2)

Joda-Time中的持续时间表示毫秒数.这段时间没有附加到时间轴上.所以没有“天”的概念.

引用the documentation

An immutable duration specifying a length of time in milliseconds.

A duration is defined by a fixed number of milliseconds. There is no concept of fields, such as days or seconds, as these fields can vary in length.

因此,虽然您无法添加/减去天数,但您可以添加/减去毫秒数是一般日期的24小时,而不考虑日历问题,也不考虑夏令时(DST)等异常情况.

使用java.util.concurrent.TimeUnit枚举计算该毫秒数.

long millis = TimeUnit.DAYS.toMilliseconds( 2 ) ; // 2 days of 24 hours * 60 minutes per hour * 60 seconds per minute * 1,000 milliseconds per second.

Duration twoGenericDays = Duration.millis( millis ) ;

Duration类为该工作提供了一个快捷方式,静态方法Duration.standardDays,其中“standard”表示与日历无关的24小时通用时间块.

Duration twoGenericDays = Duration.standardDays( 2 ) ;  // Two generic 24-hour days, unrelated to the calendar.

加.

Duration d = myDuration.plus( twoGenericDays ) ;

减去.

Duration d = myDuration.minus( twoGenericDays ) ;

java.time

Joda-Time项目现在处于维护模式,并建议迁移到其后续版本java.time类.

与上面讨论的概念相同,其中java.time.Duration表示未附加到时间线的时间跨度.除了分辨率更精细:nanoseconds而不是milliseconds.技术上,持续时间包括(a)整数秒和(b)构成小数秒的纳秒计数.

Duration twoGenericDays = Duration.ofDays( 2 ) ;  // Two generic days, each being a 24 hours long.

加.

Duration d = myDuration.plus( twoGenericDays ) ;

减去.

Duration d = myDuration.minus( twoGenericDays ) ;

与Joda-Time一样,java.time类基于immutable objects模式构建.不是改变(“改变”)一个对象,而是实例化一个新的独立对象.

关于java.time

java.time框架内置于Java 8及更高版本中.这些课程取代了麻烦的旧legacy日期时间课程,如java.util.Date,Calendar和& SimpleDateFormat.

Joda-Time项目现在是maintenance mode,建议迁移到java.time课程.

要了解更多信息,请参阅Oracle Tutorial.并搜索Stack Overflow以获取许多示例和解释.规格是JSR 310.

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

从哪里获取java.time类?

> Java SE 8,Java SE 9,Java SE 10及更高版本

>内置.
>部分标准Java API,带有捆绑实现.
> Java 9增加了一些小功能和修复.

> Java SE 6Java SE 7

>大部分java.time功能都被反向移植到Java 6& 7月0700.

> Android

>更新版本的Android捆绑java.time类的实现.
>对于早期的Android(< 26),ThreeTenABP项目适应ThreeTen-Backport(如上所述).见How to use ThreeTenABP….

ThreeTen-Extra项目使用其他类扩展了java.time.该项目是未来可能添加到java.time的试验场.您可以在这里找到一些有用的类,例如Interval,YearWeek,YearQuartermore.

上一篇:如何在Java中获取数组中所有持续时间的总和?


下一篇:php – Gettext缓存烦恼