我有一个连接到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库存在错误?我想念什么?
答案 0 :(得分:0)
不推荐使用Java Date构造函数,更重要的是,它使用本地时间。所以我的猜测是您的Java机器距离UTC一小时路程。