将长号转换为日期,时间用C表示

时间:2013-04-23 23:03:40

标签: c time.h

我正在解决spoj问题 其中当前时间戳为sqaured,然后除以400000007,其余部分转换为dat时间 以下是我使用的技术..

remainder = result%4000000007 ; 

printf("%ul\n",remainder); 


//convert the timestamp into date , time 

dt = localtime(&remainder); 
// use any strftime format spec here 
// strftime(b, sizeof(b), "%m%d%H%M%y", dt); 
// fprintf(stdout, "%s", b); 
// printf("%s\n",asctime(localtime(&remainder))); 
 ltime = (time_t)remainder; 
 printf("%s\n",asctime(dt)); 
 printf("%s\n",ctime(&ltime));

显示的错误是分段错误,在asctimeltime是time_t变量,'b'是缓冲区,dt是struct tm *,我也尝试过转换余下的是time_t变量,但仍然有效。此外,评论代码显示了我的尝试。 使用调试器,我发现asctime返回null。

问题出在哪里?

1 个答案:

答案 0 :(得分:1)

很难确切地说出所提供的代码有什么问题。但是,在您的评论中,您认为remainder的类型为unsigned long long。但是,您将其地址传递给localtime(),这是一个错误。 localtime()需要time_t *

可能发生的情况是,由于传入了错误的类型,localtime()检测到一些错误并返回NULL值。然后,将此值传递到asctime()也会产生NULL返回值。

顺便说一下,你的printf有错误的说明符。使用%llu打印unsigned long long