将Unix时间转换为可读时间

时间:2018-07-08 18:46:06

标签: c gps unix-timestamp gps-time

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

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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为您处理复杂性,那么时间会很复杂,生活会容易得多。

答案 2 :(得分: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;