【发布时间】:2014-12-10 01:43:35
【问题描述】:
您好,我正在尝试在 C 中创建一个返回 uint16_t 的 getTime() 函数。
我现在可以成功获取字符数组
这是我输出字符数组的代码。
说今天是Dec 9 2014,输出将是091214
那么我怎样才能使输出成为uint16_t 类型?
在这种情况下,如果"0" 是uint16_t 类型,我可以将"0" 保留在091214 中吗?
char *getT(){
struct tm *tm;
time_t t;
static char str_date[10];
t = time(NULL);
tm = localtime(&t);
strftime(str_date, sizeof(str_date), "%d%m%y", tm);
return str_date;}
还有另一种方法是我从网上找到的代码中修改的。
这个返回9+12+14....的总和
uint16_t getD(){
struct tm *tm_time;
time_t ti;
//const time_t create_time;
uint16_t t, d;
ti = time(NULL);
tm_time = localtime(&ti);
t = (tm_time->tm_sec >> 1) + (tm_time->tm_min << 5) + (tm_time->tm_hour << 11);
d = (tm_time->tm_mday>>1) + ((tm_time->tm_mon+1) << 5) + ((tm_time->tm_year-80) << 9);
printf("%d %d %d %d \n",d,tm_time->tm_mday>>1,tm_time->tm_mon<<5,(tm_time->tm_year-80)<<9);
return d;}
【问题讨论】:
-
你能解释一下你需要这个做什么以及你打算如何使用它吗?看起来可能有点 XY 问题。
-
所以这是我的任务的一部分,即获取文件的时间戳。正如
struct文件中定义的讲师,creation_time是uint16_t。我的计划是entry.creation_time = getTime();这就是为什么我希望getTime() 的返回值为uint16_t。谢谢。 -
位 0–4:月份中的某天,有效值范围为 1-31(含)。位 5–8:一年中的月份,1 = 一月,有效值范围 1–12(含)。位 9–15:从 1980 年开始的年数,有效值范围 0– = 127(包括 1980–2107)。这是时间戳的要求。希望我没有弄错 uint16_t...
-
选择一个“纪元日期”,然后只使用自该开始日期以来的天数。为您提供大约 180 年的范围。