将人类可读时间转换为纪元时间

时间:2014-09-28 13:02:18

标签: c

我必须使用函数原型

在C中编写函数
time_t convertTimeToEpoch(char* datetime); 

将人类可读时间转换为大纪元时间。

我们获得了string时间戳,例如“28/02/2013 17:17:37”。

我在Google上搜索过,他们只会帮助您或告诉您如何将纪元时间转换为人类可读时间。

我对编程非常陌生,所以如果有人能帮我解决这个问题,我真的很感激

1 个答案:

答案 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:我没有编写程序来检查输入,一切都取决于用户。如果输入的语法与提到的语法不同,则程序可能会导致错误的结果。