Java.util.Date与Java.sql.Date
我有一个Oracle数据库,其中包含一个字段W_PLANNED_DATE: 19/03/2013 10:55:00 (Date)
在Java中,我把这个值放入一个变量中:
Date dteBeginOrWaitingItem = orWaitinglist.getWPlannedDate();
value: 2013-03-19
现在,我的时代到底发生了什么? 我需要这个来填充primefaces的schedulecomponent。 我如何获得完整的日期和时间值
eventResourceAvailPerDay.addEvent(new DefaultScheduleEvent(reason, dteBeginOrWaitingItem, dteEndOrWaitingItem, "waitingitem"));
由于没有其他时间或时间只是00:00:00
此方法将事件置于12:00 PM
我知道如何使用Calendar类,但它只是让我设置日期,时间似乎是空的,但在数据库视图中我有一个日期时间值。
为myBean
import java.util.Date;
@ManagedBean(name="scheduleController")
@SessionScoped
public class ScheduleController implements Serializable {
private Date dteBeginOrWaitingItem, dteEndOrWaitingItem;
//methods
try
{
//eventWaitinglist.clear();
OrWaitinglistDao orWaitinglistDao = new OrWaitinglistDaoImpl();
waitingEvents = orWaitinglistDao.getOrWaitinglistKeysByResource(rKey);
int i = 0;
Iterator<OrWaitinglist> it2 = waitingEvents.iterator();
while (it2.hasNext())
{
orWaitinglist = it2.next();
dteBeginOrWaitingItem = (Date) orWaitinglist.getWPlannedDate();
dteEndOrWaitingItem = orWaitinglist.getWPlannedDate();
//dteEndOrWaitingItem = orWaitinglist.getWPlannedDate();
reason = orWaitinglist.getWDescription();
eventResourceAvailPerDay.addEvent(new DefaultScheduleEvent(reason, dteBeginOrWaitingItem, dteEndOrWaitingItem, "waitingitem"));
i += 1;
System.out.println("EventWaiting: " + i + " " + dteBeginOrWaitingItem + " " + dteEndOrWaitingItem + " " + reason);
}
}
catch(java.util.EmptyStackException Ex)
{
System.out.println(Ex.getMessage());
}
工作更新: Bean:
try
{
//eventWaitinglist.clear();
OrWaitinglistDao orWaitinglistDao = new OrWaitinglistDaoImpl();
waitingEvents = orWaitinglistDao.getOrWaitinglistKeysByResource(rKey);
int i = 0;
Iterator<OrWaitinglist> it2 = waitingEvents.iterator();
while (it2.hasNext())
{
orWaitinglist = it2.next();
Long wPlannedDate = orWaitinglist.getWPlannedDate().getTime();
if (wPlannedDate != 0) {
Date wPlannedDateConverted = new Date(wPlannedDate);
dteBeginOrWaitingItem = convertDate(0, 0, wPlannedDateConverted);
dteEndOrWaitingItem = convertDate(orWaitinglist.getWDuration().intValue(), orWaitinglist.getWAdditionalTime().intValue(), wPlannedDateConverted);
}
reason = orWaitinglist.getWDescription();
DefaultScheduleEvent newResourceEvent = new DefaultScheduleEvent(reason, dteBeginOrWaitingItem, dteEndOrWaitingItem, orWaitinglist);
newResourceEvent.setStyleClass("waitingitem");
eventResourceAvailPerDay.addEvent(newResourceEvent);
}
}
catch(java.util.EmptyStackException Ex)
{
System.out.println(Ex.getMessage());
}
public static Date convertDate(Integer wDuration, Integer wAdditionalTime, Date availDate)
{
Calendar cal = Calendar.getInstance();
Integer wAdditionalTimeHours, wAdditionalTimeMinutes;
Integer wDurationHours, wDurationMinutes;
if(wAdditionalTime != 0 || wDuration != 0) {
if (wAdditionalTime !=0) {
wAdditionalTimeHours = (int) Math.floor (wAdditionalTime / 60);
wAdditionalTimeMinutes = wAdditionalTime - (wAdditionalTimeHours * 60);
cal.setTime(availDate);
cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DATE), cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND));
cal.add(Calendar.MINUTE, wAdditionalTimeMinutes);
cal.add(Calendar.HOUR_OF_DAY, wAdditionalTimeHours);
}
if (wDuration != 0) {
wDurationHours = (int) Math.floor (wAdditionalTime / 60);
wDurationMinutes = wAdditionalTime - (wDurationHours * 60);
cal.setTime(availDate);
cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DATE), cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND));
cal.add(Calendar.MINUTE, wDurationMinutes);
cal.add(Calendar.HOUR_OF_DAY, wDurationHours);
}
} else {
cal.setTime(availDate);
cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DATE), cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND));
}
return cal.getTime();
}
型号更新:
<property name="WPlannedDate" type="timestamp">
<column length="7" name="W_PLANNED_DATE">
<comment>Planned date</comment>
</column>
</property>
编辑:如果您使用.xml进行休眠更改类型为时间戳而不是日期。 <property name="yourdate" column="YOUR_DATE" type="timestamp" />
因此你有时间在你的数据库上并且可以使用simpledateformat
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy-HH:mm");
dateFormat.format(orWaitinglist.getWPlannedDate());
java.sql.Date不会返回时间组件,您应该在创建预处理语句或以其他任何方式查询数据库时使用java.util.Date。
编辑:与SQL查询使用java.util.Date可能会很棘手,因为查询将期望java.sql.Date。 它在春天适合我。 如果你不想使用这个,那么你也可以使用java.sql.Timestamp。
见下面的文件:
8.3.12 DATE,TIME和TIMESTAMP
有三种与时间相关的JDBC类型:
JDBC DATE类型表示由日期,月份和年份组成的日期。 相应的SQL DATE类型在SQL-92中定义,但它仅由主要数据库的一个子集实现。 一些数据库提供了支持相似语义的备选SQL类型。 JDBC TIME类型表示一个由小时,分钟和秒组成的时间。 相应的SQL TIME类型在SQL-92中定义,但它仅由主要数据库的一个子集实现。 和DATE一样,一些数据库提供了支持相似语义的替代SQL类型。 JDBC TIMESTAMP类型表示DATE加上TIME和纳秒字段。 SQL-92中定义了相应的SQL TIMESTAMP类型,但它仅由极少数的数据库实现。 由于标准Java类java.util.Date与这三种JDBC日期/时间类型中的任何一种完全不匹配(它包括DATE和TIME信息,但没有纳秒),所以JDBC定义了三个与java.util.Date相对应的子类SQL类型。 他们是:
用于SQL DATE信息的java.sql.Date。 java.util.Date基类的小时,分钟,秒和毫秒字段应设置为零。 如果提供给java.sql.Date构造函数的毫秒数为负数,那么驱动程序将计算该日期为1970年1月1日之前的毫秒数。否则,该日期将计算为指定的毫秒数, 1970年。
SQL TIME信息的java.sql.Time。 java.util.Date基类的年,月和日字段设置为1970年1月和1日。这是Java时期的“零”日期。 用于SQL TIMESTAMP信息的java.sql.Timestamp。 该类通过添加纳秒字段来扩展java.util.Date。
取而代之的java.sql.Date
, java.sql.Timestamp
和匹配方法应该被使用。 oracle类型DATE
等同于JDBC和SQL标准类型TIMESTAMP
。
当使用get/setDate
方法之一时,JDBC规范要求驱动程序排除时间部分。