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.