您好,登錄后才能下訂單哦!
今天小編給大家分享一下C語言標(biāo)準(zhǔn)時間與秒單位怎么相互轉(zhuǎn)換的相關(guān)知識點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
1.時間轉(zhuǎn)換(秒與標(biāo)準(zhǔn)時間的轉(zhuǎn)換)
(1)函數(shù)1: 將秒單位時間轉(zhuǎn)為標(biāo)準(zhǔn)時間。 --RTC實(shí)時時鐘—>秒為單位—>每秒鐘cnt++;
237562867493 -----xxxx年xx月xx日xx時xx分xx秒 星期x。
示例代碼: (模擬電子鐘)
#include <stdio.h> #include <string.h> //字符串處理 #include <Windows.h> //時間單位 int year,mon,mdeay,hour,min,t_sec; //閏年的月份 int mon_r[12]={31,29,31,30,31,30,31,31,30,31,30,31}; //平年的月份 int mon_p[12]={31,28,31,30,31,30,31,31,30,31,30,31}; unsigned int TimeToSec(int year,int mon,int mdeay,int hour,int min,int sec); void SecToTime(unsigned int sec); int main(void) { //將標(biāo)準(zhǔn)時間轉(zhuǎn)為秒單位時間 (設(shè)置時間) unsigned int time=TimeToSec(2018,6,6,16,40,20); while(1) { time++; Sleep(1000); //睡眠1秒時間。 單位是ms SecToTime(time); printf("%d-%d-%d %d:%d:%d\n",year,mon,mdeay,hour,min,t_sec); } return 0; } /* 函數(shù)功能: 判斷平年和閏年 函數(shù)返回值: 1表示閏年 0表示平年 */ int GetYearStat(int year) { if((year%4==0&&year%100!=0)||year%400==0)return 1; //閏年 return 0; //平年 } /* 將秒單位時間轉(zhuǎn)為標(biāo)準(zhǔn)時間 時間基準(zhǔn)點(diǎn): 1970年1月1日0時0分0秒 思想: 減法 */ void SecToTime(unsigned int sec) { int i; year=1970; //基準(zhǔn)年份 /*1. 計(jì)算過了多少年*/ while(sec>=365*24*60*60) //秒還夠一年 { if(GetYearStat(year)) //閏年 { if(sec>366*24*60*60) { sec-=366*24*60*60; //減去一年 year++; //年份累加 } else { break; } } else { sec-=365*24*60*60; //減去一年 year++; //年份累加 } } /*2. 計(jì)算過了多少月*/ mon=1; if(GetYearStat(year)) //閏年 { for(i=0; i<12; i++) { if(sec>=mon_r[i]*24*60*60) //夠一個月 { sec-=mon_r[i]*24*60*60; //減去一個月 mon++;//增加一個月 } else break; } } else { for(i=0; i<12; i++) { if(sec>=mon_p[i]*24*60*60) //夠一個月 { sec-=mon_p[i]*24*60*60; //減去一個月 mon++;//增加一個月 } else break; } } /*3. 計(jì)算過了多少天*/ mdeay=1; while(sec>=24*60*60) //判斷是否夠一天 { sec-=24*60*60; mdeay++; } /*4. 過了多少小時*/ hour=0; while(sec>=60*60) { sec-=60*60; hour++; } /*5. 過了多少分鐘*/ min=0; while(sec>=60) { sec-=60; min++; } /*6. 過了多少秒*/ t_sec=sec; } /* 將標(biāo)準(zhǔn)時間轉(zhuǎn)為秒單位時間 思路: 全程加法 時間基準(zhǔn)點(diǎn): 1970年1月1日0時0分0秒 返回值: 得到的秒單位時間 */ unsigned int TimeToSec(int year,int mon,int mdeay,int hour,int min,int sec) { int i; int sec_cnt=0; //記錄秒單位的時間 /*1. 轉(zhuǎn)換年*/ for(i=1970; i<year; i++) { if(GetYearStat(i)) //閏年 { sec_cnt+=366*24*60*60; } else { sec_cnt+=365*24*60*60; } } /*2. 轉(zhuǎn)換月*/ for(i=0; i<mon-1; i++) { if(GetYearStat(year)) //閏年 { sec_cnt+=mon_r[i]*24*60*60; } else { sec_cnt+=mon_p[i]*24*60*60; } } /*3. 轉(zhuǎn)換天數(shù)*/ sec_cnt+=(mdeay-1)*24*60*60; /*4. 轉(zhuǎn)換小時*/ sec_cnt+=hour*60*60; /*5. 轉(zhuǎn)換分鐘*/ sec_cnt+=min*60; /*6. 轉(zhuǎn)換秒*/ sec_cnt+=sec; return sec_cnt; //返回秒單位時間 }
完整的代碼(添加星期):
#include <stdio.h> #include <string.h> //字符串處理 #include <Windows.h> //時間單位 int year,mon,mdeay,hour,min,t_sec,week; //閏年的月份 int mon_r[12]={31,29,31,30,31,30,31,31,30,31,30,31}; //平年的月份 int mon_p[12]={31,28,31,30,31,30,31,31,30,31,30,31}; unsigned int TimeToSec(int year,int mon,int mdeay,int hour,int min,int sec); void SecToTime(unsigned int sec); int GetWeek(unsigned int sec); int main(void) { //將標(biāo)準(zhǔn)時間轉(zhuǎn)為秒單位時間 (設(shè)置時間) unsigned int time=TimeToSec(2018,9,1,16,40,20); while(1) { time++; Sleep(1000); //睡眠1秒時間。 單位是ms SecToTime(time); week=GetWeek(time); //獲取星期 printf("%d-%d-%d %d:%d:%d 星期%d\n",year,mon,mdeay,hour,min,t_sec,week); } return 0; } /* 函數(shù)功能: 判斷平年和閏年 函數(shù)返回值: 1表示閏年 0表示平年 */ int GetYearStat(int year) { if((year%4==0&&year%100!=0)||year%400==0)return 1; //閏年 return 0; //平年 } /* 將秒單位時間轉(zhuǎn)為標(biāo)準(zhǔn)時間 時間基準(zhǔn)點(diǎn): 1970年1月1日0時0分0秒 思想: 減法 */ void SecToTime(unsigned int sec) { int i; year=1970; //基準(zhǔn)年份 /*1. 計(jì)算過了多少年*/ while(sec>=365*24*60*60) //秒還夠一年 { if(GetYearStat(year)) //閏年 { if(sec>366*24*60*60) { sec-=366*24*60*60; //減去一年 year++; //年份累加 } else { break; } } else { sec-=365*24*60*60; //減去一年 year++; //年份累加 } } /*2. 計(jì)算過了多少月*/ mon=1; if(GetYearStat(year)) //閏年 { for(i=0; i<12; i++) { if(sec>=mon_r[i]*24*60*60) //夠一個月 { sec-=mon_r[i]*24*60*60; //減去一個月 mon++;//增加一個月 } else break; } } else { for(i=0; i<12; i++) { if(sec>=mon_p[i]*24*60*60) //夠一個月 { sec-=mon_p[i]*24*60*60; //減去一個月 mon++;//增加一個月 } else break; } } /*3. 計(jì)算過了多少天*/ mdeay=1; while(sec>=24*60*60) //判斷是否夠一天 { sec-=24*60*60; mdeay++; } /*4. 過了多少小時*/ hour=0; while(sec>=60*60) { sec-=60*60; hour++; } /*5. 過了多少分鐘*/ min=0; while(sec>=60) { sec-=60; min++; } /*6. 過了多少秒*/ t_sec=sec; }
(2)函數(shù)2: 將標(biāo)準(zhǔn)時間轉(zhuǎn)為秒單位的時間。
2018年6月1日19點(diǎn)41分23秒----------xxxxxxx秒
閏年366,平年365。 區(qū)分: 每年二月份相差一天.
標(biāo)準(zhǔn)時間基準(zhǔn)點(diǎn): 1970年1月1日0時0分0秒。
/* 將標(biāo)準(zhǔn)時間轉(zhuǎn)為秒單位時間 思路: 全程加法 時間基準(zhǔn)點(diǎn): 1970年1月1日0時0分0秒 返回值: 得到的秒單位時間 */ unsigned int TimeToSec(int year,int mon,int mdeay,int hour,int min,int sec) { int i; int sec_cnt=0; //記錄秒單位的時間 /*1. 轉(zhuǎn)換年*/ for(i=1970; i<year; i++) { if(GetYearStat(i)) //閏年 { sec_cnt+=366*24*60*60; } else { sec_cnt+=365*24*60*60; } } /*2. 轉(zhuǎn)換月*/ for(i=0; i<mon-1; i++) { if(GetYearStat(year)) //閏年 { sec_cnt+=mon_r[i]*24*60*60; } else { sec_cnt+=mon_p[i]*24*60*60; } } /*3. 轉(zhuǎn)換天數(shù)*/ sec_cnt+=(mdeay-1)*24*60*60; /*4. 轉(zhuǎn)換小時*/ sec_cnt+=hour*60*60; /*5. 轉(zhuǎn)換分鐘*/ sec_cnt+=min*60; /*6. 轉(zhuǎn)換秒*/ sec_cnt+=sec; return sec_cnt; } /* 函數(shù)功能: 根據(jù)秒單位時間獲取星期 函數(shù)形參: 秒單位時間 返回值 :星期(1~7) */ int GetWeek(unsigned int sec) { int mdeay=sec/60/60/24; //將秒單位時間轉(zhuǎn)為天數(shù) switch(mdeay%7) { case 0: //星期4 return 4; break; case 1://星期5 return 5; break; case 2: //星期6 return 6; break; case 3://星期天 return 7; break; case 4://星期1 return 1; break; case 5://星期2 return 2; break; case 6: //星期3 return 3; break; default: break; } }
以上就是“C語言標(biāo)準(zhǔn)時間與秒單位怎么相互轉(zhuǎn)換”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。