我正在尝试使用Querydsl比较存储在不同时区(例如纽约时间下午2点和芝加哥时间下午1点)的相同日期,但在将日期保持为Joda Time org.joda.time.DateTime
时遇到问题,在{{1}持续存在时效果很好但是。这是实体类,它的相关部分:
java.util.Calendar
public class AvailabilityCalendarEvent {
@Basic(optional = false)
@Columns(columns = {
@Column(name = "end_time"),
@Column(name = "end_time_zone")
})
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTimeWithZone")
private org.joda.time.DateTime end;
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private java.util.Calendar start;
// omitted code
}
字段是日历,start
是日期时间。这个测试在芝加哥持续一段时间,然后尝试在纽约使用相同的时间(在1小时内计算时区差异),按预期工作。
end
此测试与开始日期测试完全相同,除了它比较使用@Test
public void testDateEqualityUsingCalendar() {
Calendar chicagoTime = new DateTime(2016, 1, 13, 15, 0, 0, DateTimeZone.forID("America/Chicago")).toCalendar(null);
AvailabilityCalendarEvent chicagoCalendarEvent = new AvailabilityCalendarEvent();
chicagoCalendarEvent.setStart(chicagoTime);
calendarEventRepository.save(chicagoCalendarEvent);
Calendar laTime = new DateTime(2016, 1, 13, 13, 0, 0, DateTimeZone.forID("America/Los_Angeles")).toCalendar(null);
ArrayList<CalendarEvent> retrievedCalendarEvents = Lists.newArrayList(calendarEventRepository.findAll(QCalendarEvent.qCalendarEvent.start.eq(laTime)));
assertEquals(1, retrievedCalendarEvents.size()); // Passes
}
存储的结束日期,它失败。
DateTime
任何想法为什么会发生或如何解决?
另外,我确认做了一本手册&#39;当时间戳和时区连接时,对那些相同的DateTime日期进行SQL比较:
@Test
public void testDateEqualityUsingDateTime() {
DateTime chicagoTime = new DateTime(2016, 1, 13, 15, 0, 0, DateTimeZone.forID("America/Chicago"));
AvailabilityCalendarEvent chicagoCalendarEvent = new AvailabilityCalendarEvent();
chicagoCalendarEvent.setEnd(chicagoTime);
calendarEventRepository.save(chicagoCalendarEvent);
DateTime laTime = new DateTime(2016, 1, 13, 13, 0, 0, DateTimeZone.forID("America/Los_Angeles"));
ArrayList<CalendarEvent> retrievedCalendarEvents = Lists.newArrayList(calendarEventRepository.findAll(QCalendarEvent.qCalendarEvent.end.eq(laTime)));
assertEquals(1, retrievedCalendarEvents.size()); // Fails
}