title: Java: calculating duration
body: <p>I created the following code to calculate the duration between two timestamps which can come in two different formats:</p>
  
  <pre><code>public class dummyTime {
  public static void main(String[] args) {
      try {
          convertDuration("2008-01-01 01:00 pm - 01:56 pm");
          convertDuration("2008-01-01 8:30 pm - 2008-01-02 09:30 am");
      } catch (Exception e) {
          e.printStackTrace();
      }
  }
  
  private static String convertDuration(String time) throws Exception {
      String ts[] = time.split(" - ");
      SimpleDateFormat formatNew = new SimpleDateFormat("HH:mm");
      Date beg, end;
      String duration = null;
  
      beg = getDateTime(ts[0]);
      end = getDateTime(ts[1], beg);
  
      duration = formatNew.format(end.getTime() - beg.getTime());
      System.out.println(duration + " /// " + time + " /// " + beg + " /// "
              + end);
  
      return duration;
  }
  
  private static Date getDateTime(String dateTime) throws ParseException {
      DateFormat formatOldDateTime = new SimpleDateFormat(
              "yyyy-MM-dd hh:mm aa");
      DateFormat formatOldTimeOnly = new SimpleDateFormat("hh:mm aa");
      Date date = null;
  
      try {
          date = formatOldDateTime.parse(dateTime);
      } catch (ParseException e) {
          date = formatOldTimeOnly.parse(dateTime);
      }
  
      return date;
  }
  
  private static Date getDateTime(String dateTime, Date orig)
          throws ParseException {
      Date end = getDateTime(dateTime);
  
      if (end.getYear() == 70) {
          end.setYear(orig.getYear());
          end.setMonth(orig.getMonth());
          end.setDate(orig.getDate());
      }
  
      return end;
  }
  }
  </code></pre>
  
  <p>The output it generates is:</p>
  
  <pre><code>01:56 /// 2008-01-01 01:00 pm - 01:56 pm /// Tue Jan 01 13:00:00 CET 2008 /// Tue Jan 01 13:56:00 CET 2008
  14:00 /// 2008-01-01 8:30 pm - 2008-01-02 09:30 am /// Tue Jan 01 20:30:00 CET 2008 /// Wed Jan 02 09:30:00 CET 2008
  </code></pre>
  
  <p>My questions are:</p>
  
  <ol>
  <li>Why are the results always wrong
  (always +1h)? </li>
  <li>What is a better
  way to identify timestamps without
  day? == 70 doesn't look good and the
  getDay &amp; setDay functions are
  deprecated too.</li>
  </ol>
  
  <p>Many many thanks, this issue has been driving me crazy for several hours.</p>