将用户TimeZone日期转换为UTC,编写转换器

时间:2013-06-25 23:51:32

标签: java hibernate datetime timezone

我有一个Action课程:

public class Action implements Serializable {
    private Integer actionID;
    private Integer actionStatus;
    private User    user;
    private Date    actionDueDate;
 }

我正在使用hibernate来存储Action。用户在他自己的时区中选择actionDueDate

  1. 我想在将用户时区转换为UTC后将Action's actionDueDate转换为UTC。 请建议我怎么做。 我很乐意编写自己的转换,但想知道Hibernate是否可以自动处理,或者是否还有其他更好的方法。 我的数据库是MySQL。

  2. 有没有办法可以指定对象属性初始化的顺序 在Java / Hibernate中?因为如果我正在编写自己的转换器,我需要在User之前初始化actionDueDate属性。

3 个答案:

答案 0 :(得分:1)

java.util.Date不携带任何时区信息;它实际上是一个围绕getTime()返回的long的瘦包装器。将actionDueDate更改为Long并将其保留为。

或者使用Joda-Time并将actionDueDate更改为 带有时区的org.joda.time.DateTime,并使用joda-contrib与Hibernate 3.x或usertype project用于与Hibernate 4集成。

答案 1 :(得分:0)

您可以在java中使用Internationalization Concept,我们可以获取本地时间等。

答案 2 :(得分:0)

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