我必须使用函数原型
在C中编写函数time_t convertTimeToEpoch(char* datetime);
将人类可读时间转换为大纪元时间。
我们获得了string
时间戳,例如“28/02/2013 17:17:37
”。
我在Google上搜索过,他们只会帮助您或告诉您如何将纪元时间转换为人类可读时间。
我对编程非常陌生,所以如果有人能帮我解决这个问题,我真的很感激
答案 0 :(得分:0)
考虑到闰年,将人类可读时间转换为epoc时间有点棘手。根据维基百科纪元时间是自01/01/1970 00:00:00以来所花费的时间,忽略了闰秒。我已经尝试按照这个定义编写一个程序来满足您的需求。享受:)
INPUT:它应严格遵循以下语法。
dd/mm/yyyy hh:mm:ss
例如,一个人可以进入2月1971年,5:00:00 am作为02/01/1971 05:00:00。这一年也应该在1970年的范围内
输出:
<time in epoch>
注意:我没有检查过很多测试用例。如果在任何地方失败,请通知我。
程序:
#include<stdio.h>
#include<stdbool.h>
unsigned int convertTimeToEpoch(char *dateTime);
int days(int,int,int,int,int,int);
int month(int,int);
bool isleapyear(int);
void main(){
char dtArr[19];
char *dateTime;
unsigned int epoc;
dateTime=dtArr;
printf("\nEnter Date time as(DD/MM/YYYY HH:MM:SS)");
scanf(" %[^\n]s",dtArr);
epoc=convertTimeToEpoch(dateTime);
printf("\nepoc time:%d\n",epoc);
}
unsigned int convertTimeToEpoch(char* dateTime){
int char2num(char);
int i,y=0,m=0,d,h,min,sec,day;
unsigned int time;
d= char2num(dateTime[0])*10 + char2num(dateTime[1]);
m= char2num(dateTime[3])*10 + char2num(dateTime[4]);
y= char2num(dateTime[6])*1000 + char2num(dateTime[7])*100 + char2num(dateTime[8])*10 + char2num(dateTime[9]);
h= char2num(dateTime[11])*10 + char2num(dateTime[12]);
min= char2num(dateTime[14])*10 + char2num(dateTime[15]);
sec= char2num(dateTime[17])*10 + char2num(dateTime[18]);
day= days(1970,y,1,m,1,d);
time=((day*24+h)*60+min)*60+sec;
return time;
}
int days(int y1,int y2,int m1,int m2,int d1,int d2){
int count=0,i;
for(i=y1;i<y2;i++){
if(isleapyear(i))
count+=366;
else
count+=365;
}
count-=month(m1,y1);
count-=d1;
count+=month(m2,y2);
count+=d2;
if(count<0)
count=count*-1;
return count;
}
int month(int a,int yy){
int x=0,c;
int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31};
for(c=0;c<a-1;c++){
if(c==1){
if(isleapyear(yy))
x+=29;
else
x+=28;
}
else x+=mon[c];
}
return(x);
}
bool isleapyear(int year){
bool i;
if ( year%400 == 0)
i=true;
else if ( year%100 == 0)
i=false;
else if ( year%4 == 0 )
i=true;
else
i=false;
return i;
}
int char2num(char c){
int i;
i= (int)c-48;
return i;
}
P.S:我没有编写程序来检查输入,一切都取决于用户。如果输入的语法与提到的语法不同,则程序可能会导致错误的结果。