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

Java 使用JodaTime获取一年中每个月的第一天和最后一天的最简单方法,java,android,jodatime,Java,Android,Jodatime,我将日期/时间作为长值存储在Sqlite表中,因此它们最终看起来像1383292113。这样做的问题是,虽然很容易储存,但很难分类。我正在开发一个与highcharts图形关联的过滤功能,允许用户将图形过滤到特定的日期范围,因此需要能够从表中按天、月等对结果进行过滤和求和 到目前为止,我想到的唯一方法是使用以下代码行,每个月都需要重复这些代码行: LocalDate ld2 = new LocalDate(); long januaryStart = ld2.monthOfYear().with

我将日期/时间作为长值存储在Sqlite表中,因此它们最终看起来像1383292113。这样做的问题是,虽然很容易储存,但很难分类。我正在开发一个与highcharts图形关联的过滤功能,允许用户将图形过滤到特定的日期范围,因此需要能够从表中按天、月等对结果进行过滤和求和

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

LocalDate ld2 = new LocalDate();
long januaryStart = ld2.monthOfYear().withMinimumValue().dayOfMonth().withMinimumValue().toDateTimeAtStartOfDay().getMillis();
long januaryEnd = ld2.monthOfYear().withMinimumValue().dayOfMonth().withMaximumValue().toDateTimeAtMidnight().getMillis();
然后,我只需将一个月添加到一月,得到二月,等等。使用这个,我应该能够得到月初和月底的毫秒,并将其传递给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);
}
LocalDate=new LocalDate();//注意:系统时区中的当前日期
日期=年月日(1);//定于一月
while(date.getMonthOfYear()<12){
long monthStart=date.dayOfMonth().withMinimumValue().toDateTimeAtStartOfDay().getMillis();
long monthEnd=date.dayOfMonth().withMaximumValue().toDateTimeAtStartOfDay().getMillis();
//将您的long存储在db中
日期=日期加分(1);
}

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

DateTime
具有
。withDayOfYear()
谢谢!当我将数据发送到Parse.com后端数据库时,我使用了Millis,该数据库似乎记录了不同的日期,因此在应用程序和后端之间使用Millis似乎是最容易的,而不是尝试在两者之间转换。