I also checked if the changing temporal annotation to "TIMESTAMP" affects
this situation in any way. But there is no change - the fetched data still
appears to be 1982-03-27 23:00:00 after refreshing by ctrl + r for few
times.

Ok, I got it - truncating the date does not change it after all, it only
get rid of the time part.

2016-03-30 17:31 GMT+02:00 g kuczera <gkucz...@gmail.com>:

> Hi again, guys.
>
> I grepped for the TimeZone in the project directory, but there is nothing
> interesting there (at least for me).
> If I use
> Calendar.getInstance(TimeZone.getTimeZone("GMT"), Locale.ROOT);
> to get the calendar, the resulting log looks like this:
>
>
> 30-03-16 16:59:42:797 - {INFO} profil.ProfilEdition Thread
> [qtp1357767732-92];  ****
> 30-03-16 16:59:42:804 - {INFO} profil.ProfilEdition Thread
> [qtp1357767732-92];  birth date equals (setupRender - getting from dao):
> 1982-03-28
> 30-03-16 16:59:42:805 - {INFO} profil.ProfilEdition Thread
> [qtp1357767732-92];  birth date equals (setupRender - getting from raw
> query): 1982-03-28 00:00:00.0, 1982-03-28 00:00:00.0
> 30-03-16 16:59:42:805 - {INFO} profil.ProfilEdition Thread
> [qtp1357767732-92];  birth date time equals (setupRender): 386118000000
> 30-03-16 16:59:42:805 - {INFO} profil.ProfilEdition Thread
> [qtp1357767732-92];  birth date equals (setupRender - getting from dao by
> the calendar): 1982, 2, 27, 23:0:0 (day of week: 7, time zone: Greenwich
> Mean Time, dst offset: 0)
> 30-03-16 16:59:49:500 - {INFO} profil.ProfilEdition Thread
> [qtp1357767732-72];  ****
> 30-03-16 16:59:49:500 - {INFO} profil.ProfilEdition Thread
> [qtp1357767732-72];  birth date equals (setupRender - getting from dao):
> 1982-03-28
> 30-03-16 16:59:49:501 - {INFO} profil.ProfilEdition Thread
> [qtp1357767732-72];  birth date equals (setupRender - getting from raw
> query): 1982-03-28 00:00:00.0, 1982-03-28 00:00:00.0
> 30-03-16 16:59:49:502 - {INFO} profil.ProfilEdition Thread
> [qtp1357767732-72];  birth date time equals (setupRender): 386118000000
> 30-03-16 16:59:49:502 - {INFO} profil.ProfilEdition Thread
> [qtp1357767732-72];  birth date equals (setupRender - getting from dao by
> the calendar): 1982, 2, 27, 23:0:0 (day of week: 7, time zone: Greenwich
> Mean Time, dst offset: 0)
> 30-03-16 16:59:53:771 - {INFO} profil.ProfilEdition Thread
> [qtp1357767732-95];  ****
> 30-03-16 16:59:53:772 - {INFO} profil.ProfilEdition Thread
> [qtp1357767732-95];  birth date equals (setupRender - getting from dao):
> 1982-03-27
> 30-03-16 16:59:53:773 - {INFO} profil.ProfilEdition Thread
> [qtp1357767732-95];  birth date equals (setupRender - getting from raw
> query): 1982-03-28 00:00:00.0, 1982-03-28 00:00:00.0
> 30-03-16 16:59:53:773 - {INFO} profil.ProfilEdition Thread
> [qtp1357767732-95];  birth date time equals (setupRender): 386031600000
> 30-03-16 16:59:53:773 - {INFO} profil.ProfilEdition Thread
> [qtp1357767732-95];  birth date equals (setupRender - getting from dao by
> the calendar): 1982, 2, 26, 23:0:0 (day of week: 6, time zone: Greenwich
> Mean Time, dst offset: 0)
> 30-03-16 16:59:55:067 - {INFO} profil.ProfilEdition Thread
> [qtp1357767732-72];  ****
> 30-03-16 16:59:55:067 - {INFO} profil.ProfilEdition Thread
> [qtp1357767732-72];  birth date equals (setupRender - getting from dao):
> 1982-03-27
> 30-03-16 16:59:55:069 - {INFO} profil.ProfilEdition Thread
> [qtp1357767732-72];  birth date equals (setupRender - getting from raw
> query): 1982-03-27 23:00:00.0, 1982-03-27 23:00:00.0
> 30-03-16 16:59:55:069 - {INFO} profil.ProfilEdition Thread
> [qtp1357767732-72];  birth date time equals (setupRender): 386031600000
> 30-03-16 16:59:55:069 - {INFO} profil.ProfilEdition Thread
> [qtp1357767732-72];  birth date equals (setupRender - getting from dao by
> the calendar): 1982, 2, 26, 23:0:0 (day of week: 6, time zone: Greenwich
> Mean Time, dst offset: 0)
>
> The "birth date time equals" log is the result of
> "Long.toString(user.getBirthDate().getTime())" call.
>
> I also changed the column type to TIMESTAMPTZ. Then the logs looks fine:
> http://pastebin.com/hXvdp2n1
>
> 2016-03-30 10:54 GMT+02:00 Cezary Biernacki <cezary...@gmail.com>:
>
>> Hi,
>> As I said before, I am pretty sure that your problem is not Tapestry
>> related, but caused by mismatches in timezone interpretation between
>> values
>> stored by Postgres and JDBC. I will try to help, but for more information
>> check more general resources regarding Postgress, JDBC and date/time
>> handling in Java.
>>
>> Your Birthdate field is declared 'timestamp without timezone' in
>> Postgress,
>> so it tells the client code to interpret the value in its local timezone
>> (whatever it is set). As during summer time in Central European Time 23:00
>> is equal to midnight in UT,C it explains the mismatch. Also, please
>> remember that the values stored in Postgress database (for 'timestamp'
>> type) are not really year-month-day, but actually seconds from some
>> predetermined moment (epoch). The difference between 'timestamp with time
>> zone' and 'timestamp without time zone' types in Postgress is how it
>> handles input and output values. 'With time zone' type normalises input
>> values to UTC and output values are in UTC, 'without time zone' ignores
>> any
>> time zone information on input values and tells a client to interpret
>> output values in whatever timezone it wants. I strongly recommend avoiding
>> 'timestamp without time zone' type, as it causes problems exactly like you
>> are observing.
>>
>> Only confusing thing in your information is that sometimes you get the
>> date
>> you want, and sometimes not. Are you sure that they come from the same
>> record? If they are from the same record, my guess is that there are calsl
>> to TimeZone.setDefault() in your code, probably added as crude attempts to
>> "fix" timezone problems. You can try using
>> "Calendar.getInstance(TimeZone.getTimeZone("GMT"), Locale.ROOT);" instead
>> of Calendar.getInstance() to avoid problems with default settings.
>>
>> Best regards,
>> Cezary
>>
>>
>>
>>
>> On Wed, Mar 30, 2016 at 9:30 AM, JumpStart <
>> geoff.callender.jumpst...@gmail.com> wrote:
>>
>> > A lateral thought - is there a reason the column is declared as
>> TIMESTAMP
>> > instead of DATE?
>> >
>> > > On 30 Mar 2016, at 2:50 PM, g kuczera <gkucz...@gmail.com> wrote:
>> > >
>> > > I also checked the default PostgreSQL timezone (in the postgresql.conf
>> > > file), which is set to "Poland".
>> > >
>> > > 2016-03-30 8:47 GMT+02:00 g kuczera <gkucz...@gmail.com>:
>> > >
>> > >> I observed that behavior on the production server and then confirmed
>> it
>> > on
>> > >> the test server, which is not accessed by any client, etc. I forgot
>> to
>> > >> mention that the calendar.getTimeZone().getDisplayName() call returns
>> > >> "Central European Time".
>> > >>
>> > >> 2016-03-30 3:56 GMT+02:00 Kalle Korhonen <kalle.o.korho...@gmail.com
>> >:
>> > >>
>> > >>> The same thread really reads the same value from the database every
>> few
>> > >>> seconds and it may come out different? I don't buy it, there must be
>> > >>> something else going on at the same time. Are you sure it's the same
>> > >>> value?
>> > >>> Is there something else writing to it at the same time? Can the
>> system
>> > >>> default timezone change (perhaps also print out
>> TimeZone.getDefault(),
>> > >>> Date
>> > >>> initialized to the default timezone). I'd still suspect some type of
>> > >>> timezone issue.
>> > >>>
>> > >>> Kalle
>> > >>>
>> > >>> On Tue, Mar 29, 2016 at 3:39 PM, g kuczera <gkucz...@gmail.com>
>> wrote:
>> > >>>
>> > >>>> Hi guys,
>> > >>>> First of all, thanks for the answer and the effort you put into
>> > writing
>> > >>>> them.
>> > >>>>
>> > >>>> I checked few things and read couple of articles about similar
>> > problems
>> > >>> and
>> > >>>> here is my little summary:
>> > >>>>
>> > >>>>   - my PostgreSQL birthDate column's type is 'birthDate TIMESTAMP
>> > >>> WITHOUT
>> > >>>>   TIME ZONE'
>> > >>>>   - the values contained by the column do not have the time part,
>> the
>> > >>>>   year-month-day is used, eg. 1982-03-28
>> > >>>>   - then the user Entity has the birth date field with annotations
>> > >>>>
>> > >>>>  @Column(name = "birthDate ")
>> > >>>>
>> > >>>>  @Temporal(TemporalType.DATE)
>> > >>>>
>> > >>>>  private java.util.Date birthDate;
>> > >>>>
>> > >>>>
>> > >>>>   - the call calendar.getTimeZone().getDisplayName() returns
>> > >>>>
>> > >>>> The Calendar instance is created in this way:
>> > >>>>
>> > >>>>    Calendar calendar = Calendar.getInstance();
>> > >>>>    calendar.setTime(user.getBirthDate());
>> > >>>>
>> > >>>>
>> > >>>> So the TIMESTAMP value from the database is interpreted as the
>> > >>>> java.util.Date, what is achieved by putting the Temporal
>> annotation.
>> > >>> Then,
>> > >>>> when I call the getter (getBirthDate method) the "truncated"
>> TIMESTAMP
>> > >>> is
>> > >>>> returned.
>> > >>>>
>> > >>>> But still, after fetching  the birthDate for 4 times, the fifth one
>> > >>> becomes
>> > >>>> corrupted:
>> > >>>>
>> > >>>> 30-03-16 00:25:36:746 - {INFO} profil.ProfilEdition Thread
>> > >>>> [qtp1357767732-54];  birth date equals (setupRender - getting from
>> raw
>> > >>>> query): 1982-03-28 00:00:00.0, 1982-03-28 00:00:00.0
>> > >>>> 30-03-16 00:25:44:497 - {INFO} profil.ProfilEdition Thread
>> > >>>> [qtp1357767732-65];  birth date equals (setupRender - getting from
>> raw
>> > >>>> query): 1982-03-28 00:00:00.0, 1982-03-28 00:00:00.0
>> > >>>> 30-03-16 00:25:46:037 - {INFO} profil.ProfilEdition Thread
>> > >>>> [qtp1357767732-60];  birth date equals (setupRender - getting from
>> raw
>> > >>>> query): 1982-03-28 00:00:00.0, 1982-03-28 00:00:00.0
>> > >>>> 30-03-16 00:25:46:884 - {INFO} profil.ProfilEdition Thread
>> > >>>> [qtp1357767732-62];  birth date equals (setupRender - getting from
>> raw
>> > >>>> query): 1982-03-28 00:00:00.0, 1982-03-28 00:00:00.0
>> > >>>> 30-03-16 00:25:48:843 - {INFO} profil.ProfilEdition Thread
>> > >>>> [qtp1357767732-63];  birth date equals (setupRender - getting from
>> raw
>> > >>>> query): 1982-03-27 23:00:00.0, 1982-03-27 23:00:00.0
>> > >>>>
>> > >>>> The log comes from casting the raw query result to
>> java.sql.Timestamp.
>> > >>> The
>> > >>>> value after comma is the same one, but casted to java.util.Date
>> (these
>> > >>> are
>> > >>>> results of toString method)..
>> > >>>>
>> > >>>> I will continue to investigate the thing tomorrow.
>> > >>>>
>> > >>>> 2016-03-24 15:47 GMT+01:00 Cezary Biernacki <cezary...@gmail.com>:
>> > >>>>
>> > >>>>> Hi,
>> > >>>>> I doubt it is a Tapestry related problem. I have seen similar
>> issues,
>> > >>> and
>> > >>>>> they are generally caused by time zone translations. My guess is
>> that
>> > >>>> your
>> > >>>>> database stores date birth as a timestamp (i.e. including specific
>> > >>> hours
>> > >>>>> and minutes) in some specific time zone, and your Java code
>> > retrieving
>> > >>>>> timestamps translates it to a different time zone. To diagnose,
>> you
>> > >>>> should
>> > >>>>> check what is actually stored in the database, what kind of data
>> type
>> > >>> is
>> > >>>>> used to store date of birth (database engines often have many
>> options
>> > >>> to
>> > >>>>> store dates and timestamps including or not time zones), what Java
>> > >>> type
>> > >>>> is
>> > >>>>> returned by user.getBirthDate() and what is the actual returned
>> value
>> > >>>>> (exact content, not result of toString()), and what assumptions
>> about
>> > >>>> using
>> > >>>>> time zones your JDBC driver is making. Typically problems arise
>> when
>> > >>> some
>> > >>>>> parts of the systems treat time stamps as set in UTC and others
>> apply
>> > >>>> user
>> > >>>>> (client) default time zone. To fix this, one should have
>> methodically
>> > >>>>> ensure that all parts are using consistent time zone policy, and
>> any
>> > >>> time
>> > >>>>> zone translations occur only when necessary.
>> > >>>>>
>> > >>>>> Best regards,
>> > >>>>> Cezary
>> > >>>>>
>> > >>>>>
>> > >>>>> On Tue, Mar 22, 2016 at 8:55 PM, g kuczera <gkucz...@gmail.com>
>> > >>> wrote:
>> > >>>>>
>> > >>>>>> Hi guys,
>> > >>>>>> I do not really know if it is connected with tapestry or only the
>> > >>>>>> Hibernate, but maybe that is the case. So there is a embedded
>> > >>> calendar
>> > >>>> on
>> > >>>>>> the site, the one from tapestry-jquery library:
>> > >>>>>> http://tapestry5-jquery.com/mixins/docscustomdatepicker
>> > >>>>>>
>> > >>>>>> If the user chose - during registration - the 28/03/1982 date,
>> the
>> > >>>> value
>> > >>>>>> will be correctly save to the database. But if you want to change
>> > >>> this
>> > >>>>> date
>> > >>>>>> and the calendar is going to be prepared, the date retrieved by
>> the
>> > >>>>> UserDao
>> > >>>>>> (the birthDate field) equals to 27/03/1982.
>> > >>>>>>
>> > >>>>>> I use the DAOs layer, which uses the Hibernate session. It is
>> > >>>>> automatically
>> > >>>>>> passed as an argument during the binding process (in the
>> AppModule
>> > >>>>> class):
>> > >>>>>>
>> > >>>>>> binder.bind(UserDao.class,
>> > >>>>>> UserDaoImpl.class).scope(ScopeConstants.PERTHREAD);
>> > >>>>>>
>> > >>>>>> The UserDao is used in setupRender and onActivate methods of my
>> page
>> > >>>>> (user
>> > >>>>>> is an javax Entity):
>> > >>>>>>
>> > >>>>>> user = userDao.load(userId);
>> > >>>>>> user.getBirthDate().toString()
>> > >>>>>>
>> > >>>>>> What's funny, if I use the Hibernate in the different way
>> > >>>>>>
>> > >>>>>> List<Object> birthDatesList =
>> > >>>> userDao.getSession().createSQLQuery("select
>> > >>>>>> birthdate from user where id = " + userId).list();
>> > >>>>>> java.sql.Timestamp birthDate =
>> > >>>>> (java.sql.Timestamp)(birthDatesList.get(0));
>> > >>>>>> log.info("setupRender (birth date): " + birthDate.toString());
>> > >>>>>>
>> > >>>>>> the returned date is correct.
>> > >>>>>>
>> > >>>>>> I also logged the birth dates of the other users, and the problem
>> > >>>> occurs
>> > >>>>>> only in the 28/03/1982 case. Have you ever noticed anything like
>> > >>> that?
>> > >>>>>>
>> > >>>>>
>> > >>>>
>> > >>>
>> > >>
>> > >>
>> >
>> >
>> > ---------------------------------------------------------------------
>> > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>> > For additional commands, e-mail: users-h...@tapestry.apache.org
>> >
>> >
>>
>
>

Reply via email to