gpt4 book ai didi

c - 将时间信息从 NTP 服务器传递到 strftime 函数

转载 作者:太空狗 更新时间:2023-10-29 12:34:21 25 4
gpt4 key购买 nike

我引用here上的网页,在底部使用代码ntp客户端代码.代码接收时间信息,然后我想将时间信息存储为 YYYYMMDDHHMM,如 201304211405。该代码从 NTP 服务器接收时间信息,但我觉得如何将该信息传递给 strftime 很麻烦,我应该如何将接收到的时间信息传递给 strftime?

这是代码的相关部分

i=recv(s,buf,sizeof(buf),0);

tmit=ntohl((time_t)buf[10]); //# get transmit time
tmit-= 2208988800U;
printf("tmit=%d\n",tmit);

//#compare to system time
printf("Time is time: %s",ctime(&tmit));
char buffer[13];
struct tm * timeinfo;
timeinfo = ctime(&tmit);

strftime (buffer,13,"%04Y%02m%02d%02k%02M",timeinfo);
printf("new buffer:%s\n" ,buffer);

这是我使用的完整代码

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>

void ntpdate();

int main() {
ntpdate();
return 0;
}

void ntpdate() {
char *hostname="79.99.6.190 2";
int portno=123; //NTP is port 123
int maxlen=1024; //check our buffers
int i; // misc var i
unsigned char msg[48]={010,0,0,0,0,0,0,0,0}; // the packet we send
unsigned long buf[maxlen]; // the buffer we get back
//struct in_addr ipaddr; //
struct protoent *proto; //
struct sockaddr_in server_addr;
int s; // socket
int tmit; // the time -- This is a time_t sort of

//use Socket;
proto=getprotobyname("udp");
s=socket(PF_INET, SOCK_DGRAM, proto->p_proto);

memset( &server_addr, 0, sizeof(server_addr));
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr = inet_addr(hostname);
server_addr.sin_port=htons(portno);
// send the data
i=sendto(s,msg,sizeof(msg),0,(struct sockaddr *)&server_addr,sizeof(server_addr));


/***************HERE WE START**************/
// get the data back
i=recv(s,buf,sizeof(buf),0);

tmit=ntohl((time_t)buf[10]); //# get transmit time
tmit-= 2208988800U;
printf("tmit=%d\n",tmit);

//#compare to system time
printf("Time is time: %s",ctime(&tmit));
char buffer[13];
struct tm * timeinfo;
timeinfo = ctime(&tmit);

strftime (buffer,13,"%04Y%02m%02d%02k%02M",timeinfo);
printf("new buffer:%s\n" ,buffer);
}

最佳答案

问题出在线路上......

timeinfo = ctime(&tmit);

如果 timeinfostruct tm * 类型,您不能只将它指向 char * 返回的人类可读字符串ctime().

如果您要转换为 struct tm *,则需要使用 gmtime()localtime(),具体取决于关于您是否希望 struct tm * 是 UTC 时间,还是相对于您本地时区的时间。

由于 ctime() 使用本地时区,我假设您想要那样,所以将那行替换为...

timeinfo = localtime(&tmit);

关于c - 将时间信息从 NTP 服务器传递到 strftime 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16134614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com