#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <assert.h>
#define LEN 32
typedef unsigned int ui;
typedef struct {
char year[LEN];
char month[LEN];
char day[LEN];
char hour[LEN];
char min[LEN];
char sec[LEN];
} time_val;//字符型的time_val結構體
typedef struct {
ui iYear;
ui iMonth;
ui iDay;
ui iHour;
ui iMin;
ui iSec;
} int_time;//轉unsigned int後的int_time結構體
void store_format_time(time_val *tt, char *format_time){//保存stdin中的格式化時間類型到 time_val 中
time_val *t = tt;
char *temp = format_time;
strncpy(t->year , temp , 4);
strncpy(t->month , temp+=5, 2);
strncpy(t->day , temp+=3, 2);
strncpy(t->hour , temp+=3, 2);
strncpy(t->min , temp+=3, 2);
strncpy(t->sec , temp+=3, 2);
}
void math_time(int_time it, ui math_sec){//這個函數並沒有很完整,我只寫了增加一個秒數,並且只判斷到了 分 ,後面我會繼續改進的
ui res_sec = math_sec + it.iSec;
it.iSec = (res_sec/60 > 0)?(res_sec%60):res_sec;
it.iMin = ((res_sec/60 + it.iMin)/60 > 0)?((res_sec/60 + it.iMin)%60):(res_sec/60 + it.iMin);
printf("%4d-%02d-%02d %02d:%02d:%02d\n", it.iYear, it.iMonth, it.iDay, it.iHour, it.iMin, it.iSec);
}
int_time to_int(time_val *tt){//time_val結構體 轉 int_time類型
int_time it;
it.iYear = atoi(tt->year);
it.iMonth = atoi(tt->month);
it.iDay = atoi(tt->day);
it.iHour = atoi(tt->hour);
it.iMin = atoi(tt->min);
it.iSec = atoi(tt->sec);
return it;
}
int main(int argc, char *argv[]){
time_val *t = (time_val *)malloc(sizeof(time_val));
int_time it;
assert(t);
char time_v[128];
printf("Format time type is 2011-07-05 13:22:00\n");
printf("Please input time:");
gets(time_v);
store_format_time(t, time_v);
to_int(t);
it = to_int(t);
math_time(it, 40);
free(t);
}
主要還是寫代碼寫少了,最近準備專攻一下語法了,一直都在瞭解底層..
解釋一下,註釋怎麼貼不上??發了個克的...
time_val;//字符型的time_val結構體,用來接收.
int_time;//用來接收 轉unsigned int後的int_time結構體
store_format_time()//用來保存stdin中的格式化時間類型到 time_val 中
math_time()//這個函數並沒有很完整,我只寫了增加一個秒數,並且只判斷到了 分,後面可能,可能吧,可能再跟進一下,哈哈!
to_int()//time_val結構體 轉 int_time類型
看一下執行結果:
[root@kevin /tmp]$./a.out
Format time type is 2011-07-05 13:22:00
Please input time:2010-02-12 14:20:30
2010-02-12 14:21:10
默認加了40秒