Java SimpleDataFormat始终返回1970.01.17,时区错误
我一直在使用Processing 3.0,当Arduino输出某些值时,我试图打印一个简单的时间戳,但它不起作用。我尝试使用SimpleDataFormat,但它总是返回Java SimpleDataFormat始终返回1970.01.17,时区错误,java,date,processing,simpledateformat,epoch,Java,Date,Processing,Simpledateformat,Epoch,我一直在使用Processing 3.0,当Arduino输出某些值时,我试图打印一个简单的时间戳,但它不起作用。我尝试使用SimpleDataFormat,但它总是返回1970.01.17 17:48:35 GMT,而不是实际时间。以下是MVCE: void setup () { SimpleDateFormat format = new SimpleDateFormat ("yyyy.MM.dd HH:mm:ss z"); format.setTimeZone (Time
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()
上,因为如果我将这些值插入在线的历元转换器,我会得到正确的时间。上面的代码有什么问题?对象参数接受的时间以毫秒为单位,而不是以秒为单位。你需要把它乘以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的答案后,我对代码有另一个问题,时区将忽略DST设置,因此时间戳中的小时是错误的。此外,此解决方案消除了对几行代码的需要,这总是很有帮助的。您能为我们指出
格式(长)
的文档吗?如果这不存在,那是真的,它不存在。应该更彻底地检查参考资料。但是,如果我尝试使用日期构造函数将其转换为日期,它仍然会给我错误的问题。编辑文章以反映变化。好的,它几乎可以工作,有正确的时区和所有。。。但是它有错误的DST偏移,所以它提前一小时显示时间。/1000
还在吗?它们应该被移除。否则,长整数除法将截断。不过应该没问题,把1000升换成1000升。更多信息:你是我的英雄!谢谢