5 Replies Latest reply: Oct 16, 2012 11:13 AM by sabre150 RSS

    java date/timezone odd behavior?

    968518
      Hello,

      we have a web application that always takes the input of time in its UTC format as

      2012-12-06T05:00:00.000Z


      and here is the code that parse the date into a java util Date object

      private static final Pattern PATTERN = Pattern.compile(
      "(\\d{4})(?:-(\\d{2}))?(?:-(\\d{2}))?(?:[Tt](?:(\\d{2}))?(?::(\\d{2}))?(?::(\\d{2}))?(?:\\.(\\d{3}))?)?([Zz])?(?:([+-])(\\d{2}):(\\d{2}))?");


      Matcher m = PATTERN.matcher(dateString);
      Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
      int hoff = 0, moff = 0, doff = -1;
      if (m.group(9) != null) {
      doff = m.group(9).equals("-") ? 1 : -1;
      hoff = doff * (m.group(10) != null ? Integer.parseInt(m.group(10)) : 0);
      moff = doff * (m.group(11) != null ? Integer.parseInt(m.group(11)) : 0);
      }
      c.set(Calendar.YEAR, Integer.parseInt(m.group(1)));
      c.set(Calendar.MONTH, m.group(2) != null ? Integer.parseInt(m.group(2))-1 : 0);
      c.set(Calendar.DATE, m.group(3) != null ? Integer.parseInt(m.group(3)) : 1);
      c.set(Calendar.HOUR_OF_DAY, m.group(4) != null ? Integer.parseInt(m.group(4)) + hoff: 0);
      c.set(Calendar.MINUTE, m.group(5) != null ? Integer.parseInt(m.group(5)) + moff: 0);
      c.set(Calendar.SECOND, m.group(6) != null ? Integer.parseInt(m.group(6)) : 0);
      c.set(Calendar.MILLISECOND, m.group(7) != null ? Integer.parseInt(m.group(7)) : 0);
      return c.getTime();


      Recently an odd thing was observed that as the application first starts, the returned date will be just correctly printed as
      Thur Dec 06 00:00:00 EST 2012

      since we are in EST timezone. Then after a while, after some execution, even without restart the application, the same date would be printed as
      Thur Dec 06 05:00:00 UTC 2012

      I have been digging down in the application and I don't see any changes that would reset the default timezone of our application. How could that happen? It has been a week since we started working on this and we are still clueless :-(

      Also, is there anyway to make sure the application keeps using the system timezone as that would not be changing?


      thanks a lot for any help/hints