java - SimpleDateFormat 总是返回时区错误的 1970.01.17

标签 java date processing simpledateformat epoch

我一直在使用 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);

关于java - SimpleDateFormat 总是返回时区错误的 1970.01.17,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32712735/

相关文章:

javascript - 阿拉伯语 JavaScript 中的日期时间

javascript - 在 Javascript 中使用渐变方向来引导笔触效果

java - 让 Hibernate 和 SQL Server 更好地处理 VARCHAR 和 NVARCHAR

java - 是否允许 JVM 围绕 AtomicInteger 调用重新排序指令

java - elasticsearch自定义相似度插件如何实现?

java - 使用 java.util.concurrent 类时我什么时候应该担心虚假唤醒

mysql - SQL - 查找具有最新日期的人

ios - Swift iOS doesRelativeDateFormatting 除了 "Today"和 "Yesterday"之外还有不同的值吗?

java - 如何创建一个删除按钮的函数[初学者]

java - 在单独的循环上提取draw()方法(PApplet作为JADE代理)