最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言標(biāo)準(zhǔn)時間與秒單位相互轉(zhuǎn)換

 更新時間:2022年05月12日 16:47:49   作者:DS小龍哥  
這篇文章主要介紹了C語言標(biāo)準(zhǔn)時間與秒單位相互轉(zhuǎn)換,秒單位與標(biāo)準(zhǔn)時間的轉(zhuǎn)換方式,這份代碼一般用在嵌入式單片機(jī)里比較多,比如:設(shè)置RTC時鐘的時間,從RTC里讀取秒單位時間后,需要轉(zhuǎn)換成標(biāo)準(zhǔn)時間顯示。下文分享需要的小伙伴可以參考一下

前言:

這篇文章介紹 標(biāo)準(zhǔn)時間與秒單位,秒單位與標(biāo)準(zhǔn)時間的轉(zhuǎn)換方式,這份代碼一般用在嵌入式單片機(jī)里比較多,比如:設(shè)置RTC時鐘的時間,從RTC里讀取秒單位時間后,需要轉(zhuǎn)換成標(biāo)準(zhǔn)時間顯示。

下面列出的兩個例子里,注釋和思路都寫了,思路和實現(xiàn)辦法在代碼注釋里,

1. 時間轉(zhuǎn)換-秒與標(biāo)準(zhǔn)時間的轉(zhuǎn)換

1.時間轉(zhuǎn)換(秒與標(biāo)準(zhǔn)時間的轉(zhuǎn)換)
(1)函數(shù)1: 將秒單位時間轉(zhuǎn)為標(biāo)準(zhǔn)時間。 --RTC實時時鐘—>秒為單位—>每秒鐘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)點: 1970年1月1日0時0分0秒
思想: 減法
*/
void SecToTime(unsigned int sec)
{
	int i;
	year=1970; //基準(zhǔn)年份
	/*1. 計算過了多少年*/
	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. 計算過了多少月*/
	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. 計算過了多少天*/
	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)點: 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)點: 1970年1月1日0時0分0秒
思想: 減法
*/
void SecToTime(unsigned int sec)
{
?? ?int i;
?? ?year=1970; //基準(zhǔn)年份
?? ?/*1. 計算過了多少年*/
?? ?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. 計算過了多少月*/
?? ?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. 計算過了多少天*/
?? ?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. 時間轉(zhuǎn)換-標(biāo)準(zhǔn)時間轉(zhuǎn)秒

(2)函數(shù)2: 將標(biāo)準(zhǔn)時間轉(zhuǎn)為秒單位的時間。
2018年6月1日19點41分23秒----------xxxxxxx秒
閏年366,平年365。 區(qū)分: 每年二月份相差一天.
標(biāo)準(zhǔn)時間基準(zhǔn)點: 1970年1月1日0時0分0秒。

/*
將標(biāo)準(zhǔn)時間轉(zhuǎn)為秒單位時間
思路: 全程加法
時間基準(zhǔ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;
	}
}

到此這篇關(guān)于C語言標(biāo)準(zhǔn)時間與秒單位相互轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)C語言時間轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c語言指針數(shù)組的具體使用

    c語言指針數(shù)組的具體使用

    指針數(shù)組就是存放指針變量的數(shù)組,指針數(shù)組的本質(zhì)是數(shù)組,而非指針,本文主要介紹了c語言指針數(shù)組的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2023-12-12
  • C語言中不定參數(shù)?...?的語法以及函數(shù)封裝

    C語言中不定參數(shù)?...?的語法以及函數(shù)封裝

    不定參數(shù)是指函數(shù)可以接收不確定個數(shù)的參數(shù),下面這篇文章主要給大家介紹了關(guān)于C語言中不定參數(shù)?...?的語法以及函數(shù)封裝的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • C++超集C++/CLI模塊的基本語法

    C++超集C++/CLI模塊的基本語法

    這篇文章介紹了C++超集C++/CLI模塊的基本語法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • C++ OpenCV制作黑客帝國風(fēng)格的照片

    C++ OpenCV制作黑客帝國風(fēng)格的照片

    這篇文章主要介紹了如何通過C++ OpenCV制作出黑客帝國風(fēng)格的照片,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)OpenCV有一定幫助,需要的可以參考一下
    2022-01-01
  • C++ QT智能指針的使用詳解

    C++ QT智能指針的使用詳解

    這篇文章主要介紹了C++ QT智能指針的使用,Qt是一個跨平臺的C++框架,主要用來開發(fā)圖形用戶界面程序,也可以開發(fā)不帶界面的命令行程序,下面我們來了解QT智能指針是如何使用的
    2023-12-12
  • C++實現(xiàn)LeetCode(29.兩數(shù)相除)

    C++實現(xiàn)LeetCode(29.兩數(shù)相除)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(29.兩數(shù)相除),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++設(shè)計模式之適配器模式

    C++設(shè)計模式之適配器模式

    這篇文章主要介紹了C++設(shè)計模式之適配器模式,本文詳細(xì)講解了C++中的適配器模式,并給出了實現(xiàn)代碼,需要的朋友可以參考下
    2014-09-09
  • 基于C語言航班信息查詢與檢索

    基于C語言航班信息查詢與檢索

    這篇文章主要為大家詳細(xì)介紹了基于C語言航班信息查詢與檢索,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • c++驗證哥德巴赫猜想

    c++驗證哥德巴赫猜想

    這篇文章主要介紹了c++驗證哥德巴赫猜想,哥德巴赫猜想就是任一大于2的偶數(shù),都可表示成兩個素數(shù)之和,需要的朋友可以參考下
    2014-04-04
  • 詳解C++中的一維數(shù)組和二維數(shù)組

    詳解C++中的一維數(shù)組和二維數(shù)組

    這篇文章主要介紹了詳解C++中的一維數(shù)組和二維數(shù)組,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09

最新評論

临沭县| 繁昌县| 吐鲁番市| 平陆县| 六枝特区| 汝南县| 东源县| 堆龙德庆县| 宝丰县| 潼关县| 墨玉县| 松溪县| 安图县| 博白县| 稻城县| 洪泽县| 偃师市| 博爱县| 义马市| 双辽市| 克拉玛依市| 读书| 凤台县| 韶关市| 岗巴县| 沁阳市| 四子王旗| 宣化县| 石台县| 团风县| 长岭县| 江山市| 古丈县| 阿尔山市| 龙海市| 河南省| 五大连池市| 宜兴市| 嫩江县| 蓝山县| 靖远县|