openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Adam Hardy <adam....@cyberspaceroad.com>
Subject Re: How do I persist timestamp in UTC timezone?
Date Tue, 17 Mar 2009 22:01:09 GMT
By the way, the timezone can also be stored in the timestamp column in the 
database, but I think not by default and you must specify TIMESTAMP WITH LOCAL 
TIMEZONE or similar, depending on your DB software.

Adam Hardy on 17/03/09 21:55, wrote:
> What I understand is that Java will store the date in milliseconds from 
> 1970-01-01 UTC. However your operating system and your database will 
> probably affect what is stored in the database, and then JDBC will work 
> out the correct millisecond value when it instantiates a date from your 
> database.
> 
> 
> 
> Fay Wang on 17/03/09 21:15, wrote:
>> 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.ansari@gmail.com> wrote:
>>
>>> From: fazi <faisal.ansari@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.
>>
>>
>>      
> 
> 


Mime
View raw message