javadateprocessingsimpledateformatepoch

SimpleDateFormat always returns 1970.01.17 with wrong timezone


I have been using Processing 3.0, and I am trying to print a simple timestamp when my Arduino outputs certain values, but it is not working. I tried to use SimpleDateFormat, but it always returns 1970.01.17 17:48:35 GMT, rather than the actual time. Below is the MVCE:

void setup ()
{      
  SimpleDateFormat format = new SimpleDateFormat ("yyyy.MM.dd HH:mm:ss z");
  format.setTimeZone (TimeZone.getDefault());

  long timestamp = getTimeNow();
  println(format.format(new Date(timestamp)));
  println(timestamp);
}

long getTimeNow ()
{
   Date d = new Date ();
   Calendar cal = new GregorianCalendar();

   long current = d.getTime()/1000;
   long timezone = cal.get(Calendar.ZONE_OFFSET)/1000;
   long daylight = cal.get(Calendar.DST_OFFSET)/1000;
   return current + timezone + daylight;
}

Output example:

1970.01.17 17:48:35 GMT 
1442915733

I doubt the issue is with getTimeNow(), since, if I plug the values into an online epoch converter I get the correct time. What is the issue in the above code?


Solution

  • The Date object parameter accepts the time as long in milliseconds, not seconds. You need to multiply it by 1000. and make sure that you supply it as long.

    Date dateObj = new Date(1442915733L * 1000);
    System.out.println(dateObj);