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.
)
没有天这样的东西
持续时间(startTime, endTime).minusDays(2)
Joda-Time 中的 Duration 表示毫秒数。此时间跨度未附加到时间线。所以没有“天”的概念。
引用the documentation:
以毫秒为单位指定时间长度的不可变持续时间。
持续时间由固定的毫秒数定义。没有字段的概念,例如天或秒,因为这些字段的长度可能不同。
因此,虽然您不能添加/减去 天,但您可以添加/减去毫秒数,即一般一天的 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,其中“标准”表示与日历无关的通用 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。从技术上讲,Duration 由 (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 类?
ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如Interval、YearWeek、YearQuarter 和more。