有没有办法在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将其转换为日期吗?
答案 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;约会 - 是的,但是:
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);