在C中将毫秒转换为日期

时间:2014-04-29 09:29:10

标签: c date

有没有办法在C中将milliseconds转换为date

我要做的是在C中编写一个小应用程序,它可以返回给定开始月份的财务年度等(季度,周)和isCurentYear bool,其中输入可能是毫秒或者日期!

首先,有什么方法可以在C中实现这个目标?

如果是这样,在找到将milliseconds转换为date的方法的过程中 我发现time_t的使用取代了我们系统的当前毫秒,并通过创建指向它的结构,它允许我们提取年,月,日,秒等!

参考以下代码:

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

void main()
{
    time_t t = time(000);
    //time_t t = time(0);
    struct tm tm = *localtime(&t);

    printf("now: %d-%d-%d %d:%d:%d\n", tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
                                       tm.tm_hour, tm.tm_min, tm.tm_sec);
}

此外,可以使用time_t来存储millisecond值,以便可以使用tm struct将其转换为日期吗?

3 个答案:

答案 0 :(得分:1)

函数time_t time(time_t* timer)返回UTC时间1970年1月1日00:00后经过的秒数。另外,如果输入参数timer != NULL,那么该函数也会将此参数设置为相同的值(因此您可能没有理由使用除NULL之外的任何其他内容来调用它。)


函数struct tm* localtime(const time_t* timer)获取自UTC时间1970年1月1日00:00开始经过的秒数,并返回表示等效时间&amp;的结构。日期。如果您正在处理多线程应用程序,请注意此功能线程安全。


关于你的问题 - 是否有任何方法可以将毫秒转换为时间&amp;约会 - 是的,但是:

  • 考虑到毫秒将被视为UTC时间1970年1月1日00:00。
  • 由于time_t类型为32位长,因此无法转换4G * 1000毫秒或更长时间。

这是一个将毫秒转换为时间和功能的函数。日期:

struct tm* GetTimeAndDate(unsigned long long milliseconds)
{
    time_t seconds = (time_t)(milliseconds/1000);
    if ((unsigned long long)seconds*1000 == milliseconds)
        return localtime(&seconds);
    return NULL; // milliseconds >= 4G*1000
}

答案 1 :(得分:1)

对于我们这些正在网上搜索适用于嵌入式c应用程序的答案的人来说,想想这里的pic 32编程是数学计算:

Epoch_seconds中的日期=((epoch_seconds / 1000)/ 86400)+ 25569

产生5位长的答案,10位长格式dd / MM / yyyy (注意:斜杠在此处的结果中进行编码,因此在转换为人类可读日期时请考虑到它)

其中一天= 86400毫秒

和日期1970/1/1 = 25569

示例:=((1510827144853/1000)/ 86400)+ 25569 = 43055

将43055放入excel并格式化到日期dd / MM / yyyy并且它为您提供16/11/2017

答案 2 :(得分:0)

也许,您正在寻找strftime功能。

char text[100];
time_t now = time(NULL);
struct tm *t = localtime(&now);


strftime(text, sizeof(text)-1, "%d %m %Y %H:%M", t);
printf("Current Date: %s", text);