Java和Arduino,获得与时区无关的纪元时间

时间:2018-11-22 05:28:34

标签: java time arduino

我有一个连接到Java Web服务器的Arduino程序,我需要同步时间。但是有一个小时的同步问题。

此Java程序的输出:

public class Test {
  public static void main(String[] args) {
    java.util.Date d = new java.util.Date(2018-1900, 11-1, 22, 05, 48, 10); // 22th Nov 2018, 05:48:10
    System.out.println(d);

    long t = d.getTime() / 1000;
    System.out.println(t);
  }
}

Thu Nov 22 05:48:10 CET 2018
1542862090

然后,我检查https://www.unixtimestamp.com/

Enter a Timestamp: 1542862090 -> Convert -> 
Timestamp Converter: 1542862090 Is equivalent to: 11/22/2018 @ 4:48am (UTC)

为什么我有一个小时的差异(05:48-4:48)?

相反,使用this library在Arduino中运行等效程序:

#include <RtcDS3231.h>
void setup() {
  Serial.begin(115200);
  RtcDateTime date = RtcDateTime(2018, 11, 22, 05, 48, 10); // 22th Nov 2018, 05:48:10
  uint32_t t = date.Epoch32Time();
  Serial.println(t);
}

输出为:1542865690

然后,我检查https://www.unixtimestamp.com/ 输入时间戳:1542865690->转换-​​>

Timestamp Converter: 1542865690 Is equivalent to: 11/22/2018 @ 5:48am (UTC)

这看起来正确。

问题是Java Web服务器将纪元时间(一个长整数)发送到arduino,arduino如下重建数据,我得到了一个小时的时间差:

  RtcDateTime date = RtcDateTime(0);
  date2.InitWithEpoch32Time(t);
  Serial.println(date.Hour());   // 4

如何在Java中获得正确的纪元时间,而与时区无关? 或者,Java结果是否正确,并且arduino库存在错误?我想念什么?

1 个答案:

答案 0 :(得分:0)

不推荐使用Java Date构造函数,更重要的是,它使用本地时间。所以我的猜测是您的Java机器距离UTC一小时路程。