如何使用C将日期和时间传递给结构变量

如何使用C将日期和时间传递给结构变量,c,linux,struct,C,Linux,Struct,我有一个结构叫做 struct binary { uint32_t time; uint16_t id; uint8_t data[8]; }; 在读取CAN帧的函数中,我有一个名为bin的结构变量 struct binary bin; 当我为我的结构分配时间时,如下所示 bin.time = tm-> tm_mon+1"."tm->tm_mday"_"tm->tm_hour":"tm->tm_min":"tm->tm_sec; 它显示一条错误消息

我有一个结构叫做

struct binary
{
  uint32_t time;
  uint16_t id;
  uint8_t data[8];
};
在读取CAN帧的函数中,我有一个名为bin的结构变量

struct binary bin;
当我为我的结构分配时间时,如下所示

bin.time = tm-> tm_mon+1"."tm->tm_mday"_"tm->tm_hour":"tm->tm_min":"tm->tm_sec;
它显示一条错误消息

error:expected ';' before string constant 
bin.time = tm-> tm_mon+1"."tm->tm_mday"_"tm->tm_hour":"tm->tm_min":"tm->tm_sec;
如何将时间传递给结构成员time,因为稍后我想在我的fwrite函数中使用以下结构,如下所示:

fwrite(&bin,sizeof(bin),1,fPtr);

提前感谢。

这句话是错误的:-

bin.time = tm-> tm_mon+1"."tm->tm_mday"_"tm->tm_hour":"tm->tm_min":"tm->tm_sec;
要存储上述值,必须将时间更改为如下字符串:-

char time[30];//uint32_t time; As you are new to C I ma not using a char pointer here.
现在在代码中:-

strcpy(time, itoa(tm->tm_mon+1));
strcat(time, ".");
strcat(time, itoa(tm->tm_mday));
strcat(time, "_");
strcat(time, itoa(tm->tm_hour));
strcat(time, ":");
strcat(time, itoa(tm->tm_min));
strcat(time, ":");
strcat(time, itoa(tm->tm_sec));
当我为我的结构分配时间时,如下所示

当然,这是为了将
struct tm
保存为
time\t

如果
tm
是本地时间,则使用

#include <stdint.h>
#include <time.h>

time_t t = mktime(tm);
if (t == (time_t)-1) {
  Handle_conversion_failure();
}
if (t < 0 || t > UINT32_MAX) {
  Handle_range_failure();
}
bin.time = (uint32_t) t;
#包括
#包括
时间t=mktime(tm);
如果(t==(时间t)-1){
处理转换失败();
}
如果(t<0 | | t>UINT32_MAX){
处理范围故障();
}
bin.time=(uint32_t)t;

这不是Java。尝试使用
sprintf
<代码>短跑(仓位时间,“%d%c%d%c%d%c%d%c%d”,m->tm mon+1,“.”,tm->tm mday,“,”,tm->tm小时,“:”,tm->tm分钟,:”,tm->tm秒)最后你可以
atoi
字符串。我需要用二进制来做…需要将二进制数据写入文件。由于时间是一个整数,你可能想在其中写入一个数字,而不是字符串。我可以用32位大小的缓冲区来使用sprintf吗?看起来你正在努力学习C的基础知识。我建议你读一本书或读一本书教程。@Bernatpedrovozmediano我自己的答案对我来说也很肮脏。我正在给他一个表达式
bin.time=tm->tm\u mon+1.“tm->tm\u mday”\u“tm->tm\u hour”:“tm->tm\u min”:“tm->tm\u sec如果有人提供了一个好的解决方案,我将删除我的答案。谢谢你的评论。以后我能用strtol将整个字符串转换成十六进制值吗?是的,用strtol(bin.time,NULL,16)
bin.time
不是一个字符串,但是它是一个
uint32\u t
所以不确定这是怎么回事helps@BernatPedrolVozmediano,如果希望对其进行优化,请在其已存在的结构中节省时间。
#include <stdint.h>
#include <time.h>

time_t t = mktime(tm);
if (t == (time_t)-1) {
  Handle_conversion_failure();
}
if (t < 0 || t > UINT32_MAX) {
  Handle_range_failure();
}
bin.time = (uint32_t) t;