Luc*_*old 6 java time duration date jodatime
例如,我知道joda 的 DateTime 类中的.minusDays(int)和.plus(int)方法。
但是当我使用 joda 时Duration,没有附加特定的时间点,是否有一种简单而好的方法来减少或增加特定的时间量,比如一天?
就像是:
new Duration(startTime, endTime).minusDays(2);
Run Code Online (Sandbox Code Playgroud)
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.
)
Run Code Online (Sandbox Code Playgroud)
最好迁移到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.
)
Run Code Online (Sandbox Code Playgroud)
持续时间(开始时间,结束时间)。减天(2)
DurationJoda-Time 中的A表示毫秒数。这个时间跨度没有附加到时间线。所以没有“天”的概念。
引用文档:
以毫秒为单位指定时间长度的不可变持续时间。
持续时间由固定的毫秒数定义。没有字段的概念,例如天或秒,因为这些字段的长度可能不同。
因此,虽然您不能添加/减去days,但您可以添加/减去通用一天的 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 ) ;
Run Code Online (Sandbox Code Playgroud)
该Duration课程为这项工作提供了一种捷径,即静态方法Duration.standardDays,其中“标准”意味着与日历无关的通用 24 小时时间段。
Duration twoGenericDays = Duration.standardDays( 2 ) ; // Two generic 24-hour days, unrelated to the calendar.
Run Code Online (Sandbox Code Playgroud)
添加。
Duration d = myDuration.plus( twoGenericDays ) ;
Run Code Online (Sandbox Code Playgroud)
减去。
Duration d = myDuration.minus( twoGenericDays ) ;
Run Code Online (Sandbox Code Playgroud)
该乔达时间项目现在处于维护模式,并建议迁移到它的后继者,java.time类。
与上面讨论的概念相同,其中 ajava.time.Duration表示不附加到时间线的时间跨度。除了分辨率更好:纳秒而不是毫秒。从技术上讲,aDuration由 (a) 整秒数和 (b) 构成小数秒的纳秒数组成。
Duration twoGenericDays = Duration.ofDays( 2 ) ; // Two generic days, each being a 24 hours long.
Run Code Online (Sandbox Code Playgroud)
添加。
Duration d = myDuration.plus( twoGenericDays ) ;
Run Code Online (Sandbox Code Playgroud)
减去。
Duration d = myDuration.minus( twoGenericDays ) ;
Run Code Online (Sandbox Code Playgroud)
与 Joda-Time 一样,java.time类建立在不可变对象模式上。不是改变(“变异”)一个对象,而是实例化一个新的单独对象。
该java.time框架是建立在Java 8和更高版本。这些类取代了麻烦的旧的遗留日期时间类,例如java.util.Date, Calendar, & SimpleDateFormat。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。规范是JSR 310。
您可以直接与您的数据库交换java.time对象。使用符合JDBC 4.2或更高版本的JDBC 驱动程序。不需要字符串,不需要类。java.sql.*
从哪里获得 java.time 类?
该ThreeTen-额外项目与其他类扩展java.time。该项目是未来可能添加到 java.time 的试验场。你可能在这里找到一些有用的类,比如Interval,YearWeek,YearQuarter,和更多。