【发布时间】:2020-06-21 06:57:33
【问题描述】:
我希望创建一个 Unix 时间戳。我有一个带有 ble 连接的微控制器,我通过 GATT 连接将当前时间发送到该连接。我收到了几个整数的数据。
这些是年、月、日、时、分和秒。例如:
- 年 = 2020,月 = 3,日 = 9,小时 = 10,分钟 = 10,秒 = 10。
我想将其转换为 Unix 时间,这样我就可以通过基于中断的计时器每秒递增该值。因此,将这些数据组合在一起形成 Unix 时间的正确方法是什么。我的假设如下:
创建一个足够大的整数值来存储称为 unix 时间的值,并从相应的时间分量(年、月等)中添加等效秒数。
这些是以秒为单位的值
- Year_in_seconds = 31,556,952
- Month_in_seconds = 2,630,000
- Day_in_seconds = 86,400
- Hour_in_seconds = 3,600
- Minute_in_seconds = 60
因此,Unix 时间 =
- (nYears * Year_in_seconds)+(nMonths * Month_in_seconds)+(nDays * Days_in_seconds)+(nHours * Hour_in_seconds)+(nMinutes * Minute_in_seconds)+(nSeconds * 1)
我的假设有什么问题吗?
我不知道 unix 时间如何处理一个月中不同的天数,因为不同的月份有不同的长度。还有闰年。那么我需要另一个查找表或其他东西来使这个准确吗?
或者从我的数据集中获取 unix 时间的正确方法是什么?
【问题讨论】:
-
@PaulR 听起来有点像他的微控制器没有全套可用的 posix 功能,因此副本在这里可能没有多大用处。投票重新开放。
-
我可以做的一件事是将发送的数据更改为 unix 值。这来自我使用日历库的手机。然后在我的微控制器上每秒增加一次。我想这会奏效。然后反向传输只会将 unix 时间发送回去。然后将使用我手机上的日历库再次处理时间戳。我没有直接要求在我的微型计算机上获得准确的 readbale 时间。只需要确保记录数据的时间是正确的。
-
这些是当地时间还是什么?因为当地时间不一定每天有 86,400 秒。 /// Re "我不知道 unix 时间如何处理一个月中不同的天数,因为不同的月份有不同的长度。",Unix 时间是自 1970-01 以来的秒数-01T00:00:00Z(Z 表示 UTC)。每月或每年的秒数不是恒定的,因此该过程要复杂得多。
-
你没有提到夏令时。这是您可能应该关心的其他事情。
-
Julian day article on Wikipedia 具有将日、月、年转换为天数的公式。您可以以此为基础将年、月、日、小时、分钟、秒(时区、夏令时?)转换为 unix 时间戳。
标签: c time unix-timestamp data-conversion