title: Java date with timezone changed secretly?
body: <p>we have a webservices application that always takes the input of time in its UTC format as</p>
  
  <p>2012-12-06T05:00:00.000Z</p>
  
  <p>and here is the code that parse the date into a java util Date object</p>
  
  <pre><code> 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();
  </code></pre>
  
  <p>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</p>
  
  <p>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</p>
  
  <p>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 :-(</p>
  
  <p>Also, is there anyway to make sure the application keeps using the system timezone as that would not be changing?</p>
  
  <p>thanks a lot for any help/hints</p>