java.util.Datevs java.sql.Date:何时使用哪个以及为什么?
我试图在我的Spring/Hibernate应用程序中使用HQL查询所有客户记录,其中Date1和Date2之间的DateAdded或Date1和Date2之间的LastSeen,所以我在Repository/DAO类中构建了这个HQL查询:
sessionfactory.getCurrentSession().createQuery("from Customer c where c.dateAdded BETWEEN '"+startDate+"' AND '"+endDate+"' OR c.lastSeenDate BETWEEN '"+startDate+"' AND '"+endDate+"'").list();
Run Code Online (Sandbox Code Playgroud)
我调试了应用程序来检查startDate和endDate,发现它们被发送为:
startDate:Wed 1月22日01:16:57 HKT 2014
endDate:Wed Jan 29 01:16:57 HKT 2014
在DB中,我100%确定至少有一条记录符合此查询,因为此记录DateAdded和LastSeen如下:
2014-01-23 15:33:38
2014-01-25 15:33:38
那么有人可以告诉我我在做错了什么/在这里失踪了吗?
我应该使用java.util.Date还是java.sql.Date?
我有一个VisualFox数据库,我使用适当的jdbc类型4驱动程序使用IntelliJ Idea向导检索实体.
ide(或驱动程序)已将日期字段创建为Timestamp.但是,日期字段不是时间戳,而是日期字段,它们仅存储年,月和日.
所以我想知道是否应该切换到java.util.Date或java.sql.Date.乍一看,我认为java.sql.Date应该是适当的,但它有许多声明为弃用的方法.
我将日期时间戳存储在DB中作为UTC值,同时检索它我需要作为UTC时间,并需要转换为特定的时区值.
即2015-05-01 00:09:30:00 UTC时间需要转换为IST(或其他时区)
resultSet.getDate("VisitDate")
Run Code Online (Sandbox Code Playgroud)
请帮忙.
我很惊讶java.sql.Date有一种方法toLocalDate().
java.util.Date或者java.time.Instant没有类似的方法.看来,在java.time中,ZoneId必须始终提供给获得"LocalFoo"或"OffsetBar".
来自javadoc java.sql.Date#toLocalDate():
将此Date对象转换为LocalDate.转换创建一个LocalDate,表示与本地时区中的此Date相同的日期值
哪个时区是"当地时区"?它是否依赖于数据库或JVM设置?