Hi Fazi,
   I found that by putting 

        TimeZone.setDefault(TimeZone.getTimeZone("Etc/UTC"));

   to make your java app in UTC time zone (see below in testDate), openjpa will 
store the dates in UTC in the database. 

    public void testDate(){
        TimeZone.setDefault(TimeZone.getTimeZone("Etc/UTC"));

        DateTest dt = new DateTest();
        dt.setId(id);
        dt.setCreatedTime(Calendar.getInstance(TimeZone.getTimeZone("UTC")));
        dt.setStartTime(new Date());



-Fay


--- On Tue, 3/17/09, fazi <faisal.ans...@gmail.com> wrote:

> From: fazi <faisal.ans...@gmail.com>
> Subject: How do I persist timestamp in UTC timezone?
> To: users@openjpa.apache.org
> Date: Tuesday, March 17, 2009, 9:56 AM
> Hi 
> 
> I need to persist all timestamps in UTC timezone. I found
> this documentation
> which talks about using Calendar by setting the timezone
> value to the
> desired timezone
> (http://openjpa.apache.org/builds/1.1.0/apache-openjpa-1.1.0/docs/manual/ref_guide_pc_scos.html#ref_guide_pc_calendar_timezone),
> plus this JIRA
> (https://issues.apache.org/jira/browse/OPENJPA-322) that
> gives me some idea on how I can initialize Calendar to
> insert/update time in
> UTC but nothing has worked so far. The timestamps are
> always entered and
> read in DB local timezone (PDT). I noticed that the
> Calendar timezone of the
> retrieved object is set correctly to UTC, however, the time
> is still in
> local timezone (PDT). I also noticed that the retrieved
> object has JPA
> implementation of the Calendar object:
> org.apache.openjpa.util.java$util$GregorianCalendar$proxy. 
> 
> 
> We are using openJPA version 1.1.0. 
> 
> I am copying my artifacts below. The test class has two
> timestamp fields,
> one is for UTC timezone and the other one is for local
> timezone to show that
> both values are same. 
> 
> Please let me know if any other information can help
> understand this problem
> better. 
> 
> Any help on this matter will be greatly appreciated. 
> 
> ---------------------------------------------------------
> TestDate table:
> CREATE TABLE DATETEST (
>                 ID VARCHAR(255) NOT NULL,
>                 CREATEDTIME TIMESTAMP, 
>                 STARTTIME TIMESTAMP)
>  
> ----------------------------------------------------------
> 
> ----------------------------------------------------------
> JPA class:
> ----------------------------------------------------------
> package com.my.package.entity;
> 
> import java.io.Serializable;
> import java.util.Calendar;
> import java.util.Date;
> import java.util.TimeZone;
> 
> import javax.persistence.*;
> 
> 
> @Entity
> @Table(name="DATETEST")
> public class DateTest implements Serializable  {
> 
>       @Id
>       @Column(name="ID")
>       private  String  id;
> 
>       @Temporal(TemporalType.TIMESTAMP)
>       @Column(name="CREATEDTIME")
>       private  Calendar  createdTime =
> Calendar.getInstance(TimeZone.getTimeZone("UTC"));
> 
>       @Temporal(TemporalType.TIMESTAMP)
>       @Column(name="STARTTIME")
>       private  Date  startTime;
> 
>       public Calendar getCreatedTime() {
>               return createdTime;
>       }
> 
>       public void setCreatedTime(Calendar createdTime) {
>               this.createdTime = createdTime;
>       }
> 
>       public Date getStartTime() {
>               return startTime;
>       }
> 
>       public void setStartTime(Date startTime) {
>               this.startTime = startTime;
>       }
> 
>       public String getId() {
>               return id;
>       }
> 
>       public void setId(String id) {
>               this.id = id;
>       }
> }
> ----------------------------------------------------------
> 
> ----------------------------------------------------------
> JUnit test:
> ----------------------------------------------------------
>    @Test
>    public void testDate()
>    {
>      
>      DateTest dt = new DateTest();
>      dt.setId(id);
>     
> dt.setCreatedTime(Calendar.getInstance(TimeZone.getTimeZone("UTC")));
>      dt.setStartTime(new Date());
>       
>      try
>      {
>        //persist
>      }
>      catch (Exception e)
>      {
>        fail(e.getMessage());
>      }
>      
>      // Check result
>      DateTest returned = null;
>      try
>      {
>        returned = //find by id;
>        Calendar createdTimeC = returned.getCreatedTime();
>        System.out.println("createdTime type    :
> " +
> createdTimeC.getClass().getName());
>        System.out.println("createdTime timezone:
> " +
> createdTimeC.getTimeZone());
>        System.out.println("Created time        :
> " +
> createdTimeC.getTime());
>        System.out.println("Start time          :
> " +
> returned.getStartTime());
>        System.out.println("Created time (millisecs):
> " +
> createdTimeC.getTimeInMillis());
>        System.out.println("Start time (millisecs)  :
> " +
> returned.getStartTime().getTime());
>      }
>      catch (Exception e)
>      {
>        fail(e.getMessage());
>      }
>      
>    }  
> ----------------------------------------------------------
> 
> The output is:
> 
> createdTime type    :
> org.apache.openjpa.util.java$util$GregorianCalendar$proxy
> createdTime timezone:
> sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
> Created time        : Tue Mar 17 09:40:39 PDT 2009
> Start time          : Tue Mar 17 09:40:39 PDT 2009
> Created time (millisecs): 1237308039662
> Start time (millisecs)  : 1237308039662
> 
> ----------------------------------------------------------
> And the DB entry shows:
> 
> db2> select * from DATETEST
> 
> ID                       CREATEDTIME                       
>        
> STARTTIME
> ---------------    ----------------------------------  
> -------------------------------------
> utc_test1            2009-03-16-16.14.32.380000           
> 2009-03-16-16.14.32.380000
> 
> 
> 1 record(s) selected.
> 
> db2>
> 
> -- 
> View this message in context:
> http://n2.nabble.com/How-do-I-persist-timestamp-in-UTC-timezone--tp2492546p2492546.html
> Sent from the OpenJPA Users mailing list archive at
> Nabble.com.


      

Reply via email to