gpt4 book ai didi

java - 使用 JodaTime 获取一年中每个月的第一天和最后一天的最简单方法

转载 作者:行者123 更新时间:2023-11-29 21:11:11 24 4
gpt4 key购买 nike

我将日期/时间作为 Long 值存储在 Sqlite 表中,因此它们最终看起来类似于 138329292113。这个问题虽然易于存储,但更难排序。我正在开发一个与 highcharts 图表相关的过滤功能,以允许用户将图表过滤到特定日期范围,因此需要能够按天、月等从表格中过滤和总结结果。

到目前为止,我想到的唯一方法是使用以下代码行,每个月都需要重复这些代码行:

LocalDate ld2 = new LocalDate();
long januaryStart = ld2.monthOfYear().withMinimumValue().dayOfMonth().withMinimumValue().toDateTimeAtStartOfDay().getMillis();
long januaryEnd = ld2.monthOfYear().withMinimumValue().dayOfMonth().withMaximumValue().toDateTimeAtMidnight().getMillis();

然后我会简单地在 1 月加上一个月得到 2 月,等等。使用这个,我应该能够得到月初和月底的毫秒数,将它传递给 SQL 语句返回基于此范围的总和。我一直在考虑是否有一种更简单的方法可以在每个月(或其他时间间隔)执行此操作,但到目前为止,我只能想到这些。

有没有我缺少的更简单的方法?

提前致谢!

最佳答案

我认为你尝试的有点太多了:

LocalDate date = new LocalDate(); // note: current date in system time zone
date = date.withMonthOfYear(1); // set to January

while (date.getMonthOfYear() < 12) {
long monthStart = date.dayOfMonth().withMinimumValue().toDateTimeAtStartOfDay().getMillis();
long monthEnd = date.dayOfMonth().withMaximumValue().toDateTimeAtStartOfDay().getMillis();
// store your longs in db
date = date.plusMonths(1);
}

我个人希望您重新考虑将结果存储为绝对长毫秒的决定。这种方法很难将存储的时间戳更改回普通日期。有时不会有可逆的 1:1 映射。 ANSI-SQL 具有 DATE 的列类型定义,没有时间或时区。然后在 JDBC 中,您可以使用 java.sql.Date 类。通常,您应该选择最适合您的域用例的数据类型。以毫秒为单位的类似 UNIX 的时间戳不应被视为通用解决方案。因此,如果您决定选择普通日期,那么您的代码可以进一步简化!然后无需在一天开始时转换为 DateTime(甚至取决于时区)。

关于java - 使用 JodaTime 获取一年中每个月的第一天和最后一天的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22780894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com