Arduino UDPNTP Epoch,确定一天中的分钟
Posted
技术标签:
【中文标题】Arduino UDPNTP Epoch,确定一天中的分钟【英文标题】:Arduino UDPNTP Epoch, determine minute of the day 【发布时间】:2015-06-04 22:35:03 【问题描述】:我在弄清楚这一点时遇到了一些麻烦。
每天有 1440 分钟。我希望使用 NTP 确定当天的当前分钟,所以 12:00 pm 将是 720,12:01 pm 将是 721 等
我正在使用 C 在 arduino 板上执行此操作,
const unsigned long seventyYears = 2208988800UL;
unsigned long epoch = secsSince1900 - seventyYears;
我知道(epoch % 3600 ) / 60
给了我当前小时的当前分钟(尽管它不是 100% 清楚如何)。
更新
下面的答案是正确的,但我的结果没有意义:
Serial.print("Unix time = ");
const unsigned long seventyYears = 2208988800UL;
unsigned long epoch = secsSince1900 - seventyYears;
Serial.println(epoch);
Serial.println((epoch % (3600 * 24))/ 60);
[Output:]
Unix time = 1427815654
144
但是当我计算(1427815654 % (3600 * 24)) / 60
时,我得到927
,这正是我所期望的。我的董事会到底是怎么得到144
的?
【问题讨论】:
虽然不是 100% 清楚这是什么意思?你不明白还是你指的是闰秒? 我的建议:对于任何此类微积分,请通过struct tm
和 localtime
或 gmtime
。从 1970 年到今天,存在时间上的不规则,这两个函数可以为您节省大量调试。
【参考方案1】:
如果(epoch % 3600 ) / 60
对您来说足够精确,您可以简单地使用:
(epoch % (3600 * 24)) / 60
(但是忽略了闰秒)
解释
%
给出除法的其余部分。
因此,我们将自纪元以来的所有秒数除以一天中的秒数 (3600 * 24
)。我们现在得到了一天中的第二个,所以除以 60 就是分钟。
【讨论】:
这绝对是正确的方法,但我得到的结果不正确。我相信我的原始时代可能有问题,因为我收到的值小于 100 我不确定为什么,但您的方法至少不适用于 arduino UdpNtp 客户端。您的方法给出的值刚刚超过一百...( (((epoch % 86400L) / 3600) * 60) + (epoch % 3600) / 60 )
这为我提供了我想要的,只需花费几小时和几分钟,然后计算出之间的分钟数以上是关于Arduino UDPNTP Epoch,确定一天中的分钟的主要内容,如果未能解决你的问题,请参考以下文章
Solana 按 Epoch 确定通货膨胀奖励分配的日期和时间
Tensorflow CIFAR10 教程:确定训练过程中的 epoch 数
在 Sqlite (Dbeaver) 中转换 Epoch 时间并解析出时间