1

我的 GPS 模块从 1970 年 1 月 1 日 (EG 1531074816) 开始获得了 unix 时间,如何将其转换为可读格式?我只需要获取当前的小时、分钟和秒。我不担心日期或日期。我也在使用 C。谢谢。

4

3 回答 3

2

使用 gmtime

#include <stdio.h>
#include <time.h>

int main()
{
    static const time_t unixtimestamp = 1230728833;
    struct tm *tmp = gmtime(&unixtimestamp);


    printf("%02d:%02d:%02d\n", tmp->tm_hour, tmp->tm_min, tmp->tm_sec);
    return 0;
}
于 2018-07-08T20:03:23.400 回答
1

正如 Steve Summit 所说,最快最简单的就是使用 localtime():

void show_time (time_t time_from_gps)
{
    struct tm *timmay;

    timmay = localtime(&time_from_gps);
    printf("%02d:%02d:%02d\n", timmay->tm_hour, timmay->tm_min, timmay->tm_sec);
}

你真的不想尝试滚动你自己的时间程序。如果您让 libc 为您处理复杂性,时间很复杂,生活会轻松很多。

于 2018-07-08T19:23:43.657 回答
0

如果您不想使用任何第三方代码,您可以遵循这些:您应该首先在模运算符的帮助下摆脱自 1970 年以来的所有日子。然后,自当天开始以来,您将经过几秒钟。您可以使用此数字计算经过的小时数。使用相同的方法,您可以获得分钟和秒。

如果您的时间戳以秒为单位。然后:

long currentTime;
long oneDay = 24L * 60 * 60;
long oneHour = 60 * 60;
long oneMinute = 60;

long currentDaySeconds = currentTime % oneDay;
long currentHour = currentDaySeconds / oneMinute;
long currentMinute = (currentDaySeconds % oneHour) / oneMinute;
long currentSeconds = currentDaySeconds % oneMinute;
于 2018-07-08T19:09:39.377 回答