java - 获取上季度的日期

标签 java date

我可以从下面的代码中获取最后一个季度的值:

Date date = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
int presentQuarter = (month / 3) + 1;
int lastQuarter = (presentQuarter - 1) > 0 ? presentQuarter - 1 : 4;

但是我怎样才能获得上季度的最后日期呢? (即 2017-06-30 这是上个季度的最后一个日期)。

最佳答案

您应该使用 JDK 8 的 java.time API 并尝试 ThreeTen-Extra项目,以获得期望的结果,因为它在很大程度上简化了这些场景。 我想您只需要使用日期,这样您就可以获得当前日期,如下所示:

ZoneId zone = ZoneId.systemDefault();
LocalDate today = LocalDate.now (zone);

然后,您可以使用YearQuarter ThreeTen-Extra 的类别项目获取当前和上一季度的数据如下:

YearQuarter lastQuarter = YearQuarter.now (zone).minusQuarters(1);
LocalDate lastDayOfLastQuarter = lastQuarter.atEndOfQuarter ();

免责声明:我尚未测试代码,只是为了让您了解如何使用这些 API 轻松完成日期时间计算。

更新:这是对您正在使用 JDK 7 的评论的回应,我建议如果可能的话升级到 JDK 8,以利用它附带的所有新功能。如果您无法做到这一点,您可以使用 JDK 6 和 7 的 java.time 的向后移植,即 ThreeTen-Backport。 。但在这种情况下,您将无法使用 ThreeTen-Extra 项目的 YearQuarter 类,正如 Basil Bourque 在对本文的评论中指出的那样。 Hugo's answer已经展示了仅使用 ThreeTen-Backport 的方法。

关于java - 获取上季度的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45236119/

相关文章:

java - 调用部署在远程机器上的 session bean 的方法

java - 将 PostgreSQL Query 转换为对应的 Hibernate Query

java - IKVM.NET 对象序列化与 ObjectOutputStream 的区别

javascript - ExpressJS 将 route 的时间戳转换为 mm/dd/yyyy

date - 是否有比 UTC 更 "Date"的替代 "ambiguous"数据类型?

java swing - 在 java swing 中创建一个类似旋转木马的按钮

java - 如何读取非常大的文件,即 100MB 的字符串

php - 在通过 json 发送之前转换 unix 时间戳

javascript 月、日、年检查

python - 如何将Python对象类型(应该是Python日期类型)列转换为Python日期列?