我有一个Action
类作为:
public class Action implements Serializable {
private Integer actionID;
private Integer actionStatus;
private User user;
private Date actionDueDate;
}
我正在使用hibernate来存储Action
。用户在自己的时区中选择actionDueDate
。
我希望在将用户时区转换为UTC后,将
Action's
actionDueDate
转换为UTC。请建议我怎么做。我很乐意编写自己的转换,但不知道Hibernate是否可以自动处理,或者是否有其他更好的方法。我的数据库是MySQL。有没有一种方法可以指定对象属性初始化的顺序在Java/HHibernate中?因为如果我正在编写自己的转换器,我需要在
actionDueDate
之前初始化User
属性。
java.util.Date不携带任何时区信息;它本质上是一个围绕getTime()返回的long的薄包装器。将actionDueDate更改为Long,并将其保持不变。
或者使用Joda Time并将actionDueDate更改为org.Joda.Time.DateTime,确实带有时区,并使用Joda contrib与Hibernate 3.x集成或使用usertype项目与Hibernate 4集成。
您可以在java中使用国际化概念,在那里我们可以获得本地时间等。
SimpleDateFormat dateFormatUTC = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
dateFormatUTC.setTimeZone(TimeZone.getTimeZone("UTC"));
SimpleDateFormat dateFormatlocal = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
dateFormatlocal.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
Date localDate=new Date();
Date atUTC = dateFormatlocal.parse(dateFormatUTC.format(localDate));
System.out.println("@Local: "+localDate.toString());
System.out.println("@UTC: "+atUTC.toString());
这样也可以节省夏令时。你觉得怎么样。
输出:
@Local: Thu Jun 27 08:45:32 EST 2013
@UTC: Thu Jun 27 15:45:32 EST 2013