Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SimpleDataFormat始终返回1970.01.17,时区错误_Java_Date_Processing_Simpledateformat_Epoch - Fatal编程技术网

Java SimpleDataFormat始终返回1970.01.17,时区错误

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

我一直在使用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 (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升。更多信息:你是我的英雄!谢谢