java.util.Date/JodaTime:给定java.util.Date,生成该给定日期的开始和结束

Tha*_*ham 1 java jpa date jodatime

如果我要给出一个特定的java.util.Date,我该如何生成该给定日期的开始和结束.例如,我的日期是August 25, 2011,那么我的开始日期是August 25, 2011 00 00 00,我的日期结束August 25, 2011 23 59 59

背景 :(如果你想知道为什么我问这个问题,请阅读下面的内容)

我使用JPA映射date到我的MySql数据库.我希望date有时间,所以我用TemoporalType.TIMESTAMP

@Temporal(TemporalType.TIMESTAMP)
private Date dateProcess; //java.util.Date
Run Code Online (Sandbox Code Playgroud)

我需要查询给定特定日期的所有数据,并且由于date存储如上,我需要一个日期范围来实现我想要的.

我的游戏计划是转换java.util.DateJodaTime#DateTinme,然后在那里构建开始和结束日期,并将其转换回来,以便我可以作为参数传递给JPQL.但似乎JodaTime非常不可变,我似乎无法在任何地方看到一个setter方法.

Jon*_*eet 7

A java.util.Date表示即时,不参考时区或日历.根据观察者的时区,同一时刻将有一个非常不同的开始/结束日.

你可以这样做:

DateTime dateTime = new DateTime(date.getTime(), timeZone);
LocalDate localDate = dateTime.ToLocalDate();

DateTime startOfDay = localDate.toDateTimeAtStartOfDay(timeZone);
DateTime startOfNextDay = localDate.plusDays(1).toDateTimeAtStartOfDay(timeZone);
Run Code Online (Sandbox Code Playgroud)

从最后两个变量中,您可以java.util.Date根据需要返回值.通常他们都会是午夜,但他们可能不是.

请注意,您应该以独占方式使用第二天的开头,而不是以包容的方式使用当天的最后一天,以避免错过诸如2011年8月25日23:59:59.500之类的值...