SimpleDateFormat始终以错误的时区返回1970.01.17

我一直在使用Processing 3.0,当我的Arduino输出某些值时,我正在尝试打印一个简单的时间戳,但它无法正常工作。 我尝试使用SimpleDateFormat,但它总是返回1970.01.17 17:48:35 GMT ,而不是实际时间。 以下是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; } 

输出示例:

 1970.01.17 17:48:35 GMT 1442915733 

我怀疑问题是getTimeNow() ,因为,如果我将值插入在线纪元转换器,我得到正确的时间。 上面的代码有什么问题?

Date对象参数接受时间长度,以毫秒为单位,而不是秒。 你需要将它乘以1000.并确保你提供它。

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

决定将此作为答案发布,因为它与Mitesh的解决方案不同。

我删除了getTimeNow()函数,而只是创建了一个新日期并使用了:

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

原因有两个。 在应用Matesh的答案之后,我在代码中遇到了另一个问题,TimeZone将忽略DST设置,因此时间戳中的小时是错误的。 此外,该解决方案消除了对几行代码的需求,这总是有帮助的。