- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Joda-Time中是否有现成的方式?总结年?
假设您有一个 DateTime startDate = 10-18-2016 和一个 DateTime endDate = 12-18-2017。我希望这可以四舍五入到 2 年。
目前,当我这样做时:
Years yearsBetween = Years.yearsBetween(startDate, endDate);
我得到 yearsBetween = 1。是否有使用 Joda Time 解决此问题的简单方法,或者我是否需要编写自定义方法来处理此问题?
最佳答案
Joda-Time 对时间跨度使用半开方法,其中开始是包含,结束是不包含。因此,一年从相关年份的 1 月 1 日开始,一直到但不包括下一年的 1 月 1 日。
因此,您希望 2016-2017 年的日期为两年,将开始日期移至该年的第一天,将结束日期移至其下年的第一年。
我们转换为 LocalDate
,因为我们不关心这种年计算的时间。
LocalDate start = startDate.toLocalDate().withDayOfMonth( 1 ).withMonthOfYear( 1 ); // Move to first of same year.
LocalDate stop = endDate.toLocalDate().withDayOfMonth( 1 ).withMonthOfYear( 1 ).plusYears(1); // Move to first of *following* year.
然后用 Years
执行相同的计算。
Years yearsBetween = Years.yearsBetween( start , stop ); // Half-Open, beginning is inclusive while ending is exclusive.
int years = yearsBetween.getYears(); // Plain integer.
2
中 2016 年(移至 2016-01-01)和 2017 年(移至 2018-01-01)任何日期的结果。
仅供引用,Joda-Time项目现在在maintenance mode ,团队建议迁移到 java.time类。
这项工作在 java.time 中要简单一些。 TemporalAdjuster
接口(interface)提供类来操作日期时间值。 TemporalAdjusters
类(注意复数 s
)提供了几个实现。这些为获得今年的第一名和明年的第一名提供了条件。
此处的 Zdt
指的是您可能拥有的 ZonedDateTime
对象。此类表示特定时区 (ZoneId
) 中时间轴上的时刻,分辨率为纳秒。我们从 ZonedDateTime
对象转换为 LocalDate
,然后应用一对 TemporalAdjuster
对象移动到年初和下一年年。
LocalDate start = yourStartingZdt.toLocalDate().with( TemporalAdjusters.firstDayOfYear() );
LocalDate stop = yourEndingZdt.toLocalDate().with( TemporalAdjusters.firstDayOfNextYear() );
java.time 类不包括 Joda-Time 的等价物 Years
类(class)。如果需要,您可以添加 ThreeTen-Extra项目到您的应用程序以使用包含 Years
的其他类扩展 java.time类。
或者,我们可以通过 Period
类获取年数。
与 Joda-Time 一样,包括 Period
在内的 java.time 类对时间跨度使用半开方法。我建议您自己在所有日期时间工作中始终如一地使用半开,因为这将使您的代码总体上更简单且不易出错。
Period p = Period.between( start , stop );
int years = p.getYears();
2
中 2016 年(移至 2016-01-01)和 2017 年(移至 2018-01-01)任何日期的结果。
java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧类 legacy日期时间类,例如 java.util.Date
, .Calendar
, & java.text.SimpleDateFormat
.
Joda-Time项目,现在在maintenance mode , 建议迁移到 java.time。
要了解更多信息,请参阅 Oracle Tutorial .并在 Stack Overflow 中搜索许多示例和解释。规范为 JSR 310 .
从哪里获得 java.time 类?
ThreeTen-Extra项目用附加类扩展 java.time。该项目是 future 可能添加到 java.time 的试验场。您可能会在这里找到一些有用的类,例如 Interval
, YearWeek
, YearQuarter
, 和 more .
关于java - 如何在 Joda-Time 中总结岁月,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40119161/
我是 grails 的新手。我正在使用 joda 插件来获取日期和时间。所以我在单独的列中显示日期和时间。现在我想使用条件搜索日期。 我在 gsp 页面中使用以下代码来搜索日期。
我试图在执行更多计算之前简单地将 TimeZone 信息添加回 LocalDate。 LocalDate 来自使用 ObjectLab LocalDateCalculator 将天数添加到现有 Dat
所以我在使用 JodaTime 年表 IslamicChronology 解析日期时遇到问题,因此编写了一个小示例来演示我的问题。 代码如下: import org.joda.time.Chronol
当我启动我的应用程序时,virgo 会抛出这样的异常: [2015-09-05 11:27:53.254] TCP Connection(2)-127.0.0.1 Installation of
我使用 Spring 从 Web API rest API 检索 JSON 数据,使用 Jackson Joda 模块反序列化 ISO 日期,并将其转换为 Joda DateTime。 Spring
在 Android 设备 (7.0) 上,出现此崩溃: Fatal Exception: org.joda.time.IllegalInstantException: Illegal instant
我需要将 GMT 转换为亚利桑那时间。亚利桑那州目前有 MST(夏令时关闭)。 但是在 Joda Time DateTimeZone 代码中,MST 已映射到 America/Denver: map.
大家早上好。 我想帮助您了解如何使用 1.2.1.1 版本的 Joda Time 完成 org.joda.time.DateTime 到 java.util.Date 的转换。 为什么选择 Joda
试试这个: @Type(type = "org.jadira.usertype.moneyandcurrency.joda.PersistentMoneyAmountAndCurrency") pri
尝试使用 Joda 将包含日期字符串的 JSON 字符串反序列化为 POJO 时遇到异常。 我将 Jackson2 与 Spring 和 Robospice 一起使用。 我遇到以下异常: Could
我有一个招摇的OpenAPI YAML文件,我想使用gradle-swagger-generator-plugin生成Java 这是我的config.json { "useRxJava2": tr
我想使用以下 MDX 语句: with member [x] as now()->plusMonths(1)->withDayOfMonth(1)->minusDay(1) select [x] on
System.out.println( PeriodFormat.getDefault().print(Period.hours(1).plusMinutes(30).plusSeconds(60))
我正在使用 Joda-Time Duration 来获取两个 DateTime 之间的持续时间: DateTime startTimeDate = new DateTime(startTimeDate
当我运行以下代码片段时: import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import java.sql.Times
我正在尝试在 Joda DateTime 中转换毫秒。米利斯是 1338501600000我使用了在线转换器和其他库,所有结果都是 1338501600000 millis 是 Fri Jun 01
我尝试使用以下代码,但收到错误格式无效:“12/11/2013”: String dFrom = ps.utils.gv(request, "dFrom"); String dTo = ps.ut
我正在尝试使用 Joda-Time 的持续时间类来计算两天之间的确切天数差异。这意味着我希望结果是 25.48 天,而不是仅仅 25 天。现在我有: private static final doub
有没有隐藏的方法来获得 Joda-Time以分钟为单位的时间段(或任何其他) 现在我做的是: (period.getHours()*60 + period.getMinutes() + roundTw
有谁知道如何解析日期,例如:Mon Aug 04 16:07:00 CEST 2014使用 Joda 的 DateTime 格式化程序转换为 dd/MM/YYYY HH:MM:SS。我已经尝试过了:
我是一名优秀的程序员,十分优秀!