How to decode a time value and add it to the current date (in Java)

The date/time classes of the standard Java library are rather complex and not well documented.
The code snippet below demonstrates how to parse a time string value and add the time value to a date value.

Download the complete test program: TestDateTime1.java



// Illustrates how to decode a time value and add it to todays date.
public static void main (String args[]) throws Exception {
   int t = decodeTime("12:34:56");
   Date today = getTodaysDate();
   Date d = new Date(today.getTime()+t);
   System.out.println (d); }

// Decodes a time value in "hh:mm:ss" format and returns it as milliseconds since midnight.
public static synchronized int decodeTime (String s) throws Exception {
   SimpleDateFormat f = new SimpleDateFormat("HH:mm:ss");
   TimeZone utcTimeZone = TimeZone.getTimeZone("UTC");
   f.setTimeZone (utcTimeZone);
   f.setLenient (false);
   ParsePosition p = new ParsePosition(0);
   Date d = f.parse(s,p);
   if (d == null || !isRestOfStringBlank(s,p.getIndex()))
      throw new Exception("Invalid time value (hh:mm:ss): \"" + s + "\".");
   return (int)d.getTime(); }

// Returns todays date without the time component.
public static Date getTodaysDate() {
   return truncateDate(new Date()); }

// Truncates the time component from a date/time value.
// (The default time zone is used to determine the begin of the day).
public static Date truncateDate (Date d) {
   GregorianCalendar gc1 = new GregorianCalendar();
   gc1.clear();
   gc1.setTime(d);
   int year = gc1.get(Calendar.YEAR), month = gc1.get(Calendar.MONTH), day = gc1.get(Calendar.DAY_OF_MONTH);
   GregorianCalendar gc2 = new GregorianCalendar(year,month,day);
   return gc2.getTime(); }

// Returns true if string s is blank from position p to the end.
public static boolean isRestOfStringBlank (String s, int p) {
   while (p < s.length() && Character.isWhitespace(s.charAt(p))) p++;
   return p >= s.length(); }


Author: Christian d'Heureuse (www.source-code.biz, www.inventec.ch/chdh)
License: Free / LGPL
Index