C語言實(shí)現(xiàn)時(shí)間處理工具的示例代碼
更新時(shí)間:2022年09月16日 15:55:25 作者:胡安民-獨(dú)行者
這篇文章主要為大家詳細(xì)介紹了利用C語言實(shí)現(xiàn)時(shí)間處理工具的相關(guān)資料,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
c語言-時(shí)間處理工具
頭文件
#ifndef STUDY_TIME_UTIL_H #define STUDY_TIME_UTIL_H long get_current_timestamp(); long get_time_difference(long start_time,long end_time); char* get_time_by_timestamp(long timestamp); char* format_time(long timestamp,char* format); int standard_to_stamp(char *str_time); int get_current_year(); int get_current_month(); int get_current_day(); int get_current_hour(); int get_current_minute(); int get_current_second(); int get_current_week(); long get_time_difference_second(long start_time,long end_time); long get_time_difference_minute(long start_time,long end_time); long get_time_difference_hour(long start_time,long end_time); long get_time_difference_day(long start_time,long end_time); long get_time_difference_month(long start_time,long end_time); long get_time_difference_year(long start_time,long end_time); long add_time(long timestamp,int seconds); long sub_time(long timestamp,int seconds); long add_week(long timestamp,int week); long add_second(long timestamp,int second); long add_minute(long timestamp,int minute); long add_hour(long timestamp,int hour); long add_day(long timestamp,int day); long add_month(long timestamp,int month); long add_year(long timestamp,int year); int compare_time(long timestamp1,long timestamp2); char* week_to_str(int week); int is_leap_year(int year); char* get_season_by_timestamp(long timestamp); long get_first_day_of_month(); long get_first_day_of_month_by_month(int month); long get_last_day_of_month_by_month(int month); long get_first_day_of_month_by_year(int year); long get_last_day_of_month_by_year(int year); long get_first_day_of_week_by_timestamp(long timestamp); long get_last_day_of_week_by_timestamp(long timestamp); int get_day_of_month(); int get_day_of_year(); int get_day_of_week(); int get_day_of_season(); long get_start_time_of_day(long timestamp); long get_end_time_of_day(long timestamp); #endif //STUDY_TIME_UTIL_H
功能實(shí)現(xiàn)
#include "time_util.h"
#include<time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//獲取當(dāng)前時(shí)間戳
long get_current_timestamp(){
time_t timep;
time (&timep);
return timep;
}
//計(jì)算兩個(gè)時(shí)間戳的時(shí)間差(返回毫秒)
long get_time_difference(long start_time,long end_time){
return end_time-start_time;
}
//計(jì)算兩個(gè)時(shí)間戳的時(shí)間差(返回秒)
long get_time_difference_second(long start_time,long end_time){
return (end_time-start_time)/1000;
}
//計(jì)算兩個(gè)時(shí)間戳的時(shí)間差(返回分鐘)
long get_time_difference_minute(long start_time,long end_time){
return (end_time-start_time)/60;
}
//計(jì)算兩個(gè)時(shí)間戳的時(shí)間差(返回小時(shí))
long get_time_difference_hour(long start_time,long end_time){
return (end_time-start_time)/3600;
}
//計(jì)算兩個(gè)時(shí)間戳的時(shí)間差(返回天)
long get_time_difference_day(long start_time,long end_time){
return (end_time-start_time)/86400;
}
//計(jì)算兩個(gè)時(shí)間戳的時(shí)間差(返回月)
long get_time_difference_month(long start_time,long end_time){
return (end_time-start_time)/2592000;
}
//計(jì)算兩個(gè)時(shí)間戳的時(shí)間差(返回年)
long get_time_difference_year(long start_time,long end_time){
return (end_time-start_time)/31104000;
}
//將時(shí)間戳轉(zhuǎn)換為時(shí)間
char* get_time_by_timestamp(long timestamp){
time_t timep = timestamp;
char* time_str = ctime(&timep);
return time_str;
}
//時(shí)間相加
long add_time(long timestamp,int seconds){
return timestamp+seconds;
}
//時(shí)間相減
long sub_time(long timestamp,int seconds){
return timestamp-seconds;
}
//時(shí)間比較(時(shí)間戳) ( timestamp1比timestamp2)(1:大于 0:等于 -1:小于)
int compare_time(long timestamp1,long timestamp2){
if(timestamp1>timestamp2){
return 1;
}else if(timestamp1<timestamp2){
return -1;
}else{
return 0;
}
}
//格式化時(shí)間("%Y-%m-%d %H:%M:%S)
char* format_time(long timestamp,char* format){
time_t timep = timestamp;
localtime(&timep);
char *buffer=malloc(100);
strftime(buffer, 100, format, localtime(&timep));
return buffer;
}
//獲取當(dāng)前時(shí)間的年份
int get_current_year(){
time_t timep;
time (&timep);
return localtime(&timep)->tm_year+1900;
}
//獲取當(dāng)前時(shí)間的月份
int get_current_month(){
time_t timep;
time (&timep);
return localtime(&timep)->tm_mon+1;
}
//獲取當(dāng)前時(shí)間的日
int get_current_day(){
time_t timep;
time (&timep);
return localtime(&timep)->tm_mday;
}
//獲取當(dāng)前時(shí)間的小時(shí)
int get_current_hour(){
time_t timep;
time (&timep);
return localtime(&timep)->tm_hour;
}
//獲取當(dāng)前時(shí)間的分鐘
int get_current_minute(){
time_t timep;
time (&timep);
return localtime(&timep)->tm_min;
}
//獲取當(dāng)前時(shí)間的秒
int get_current_second(){
time_t timep;
time (&timep);
return localtime(&timep)->tm_sec;
}
//獲取當(dāng)前時(shí)間的星期
int get_current_week(){
time_t timep;
time (&timep);
return localtime(&timep)->tm_wday;
}
//星期轉(zhuǎn)換
char* week_to_str(int week){
switch (week){
case 0:
return "星期日";
case 1:
return "星期一";
case 2:
return "星期二";
case 3:
return "星期三";
case 4:
return "星期四";
case 5:
return "星期五";
case 6:
return "星期六";
default:
return "未知";
}
}
//世界時(shí)間轉(zhuǎn)北京時(shí)間(需要+8小時(shí))
long utc_to_cst(long timestamp){
return timestamp+28800;
}
//將標(biāo)準(zhǔn)時(shí)間(2022-09-12 13:46:14或者2022/09/12 13:46:14)轉(zhuǎn)換為時(shí)間戳
int standard_to_stamp(char *str_time){
struct tm stm;
int iY,iM,iD,iH,iMin,iS;
memset(&stm,0,sizeof(stm));
iY = atoi(str_time);
iM = atoi(str_time+5);
iD = atoi(str_time+8);
iH = atoi(str_time+11);
iMin = atoi(str_time+14);
iS = atoi(str_time+17);
stm.tm_year=iY-1900;
stm.tm_mon=iM-1;
stm.tm_mday=iD;
stm.tm_hour=iH;
stm.tm_min=iMin;
stm.tm_sec=iS;
return (int)mktime(&stm);
}
//判斷平年和閏年(1:平年 0:閏年) 閏年2月29天 平年2月28天 閏年能被4整除但不能被100整除的年份為閏年。能被400整除的為閏年
int is_leap_year(int year){
if(year%4==0&&year%100!=0||year%400==0){
return 1;
}else{
return 0;
}
}
//通過時(shí)間戳獲取季節(jié)
char* get_season_by_timestamp(long timestamp){
int month = get_current_month();
if(month>=3&&month<=5){
return "春季";
}else if(month>=6&&month<=8){
return "夏季";
}else if(month>=9&&month<=11){
return "秋季";
}else{
return "冬季";
}
}
//獲取本月第一天的日期時(shí)間戳
long get_first_day_of_month(){
time_t timep;
time (&timep);
struct tm *p;
p=localtime(&timep);
p->tm_mday=1;
p->tm_hour=0;
p->tm_min=0;
p->tm_sec=0;
return mktime(p);
}
//獲取指定月份的第一天的日期時(shí)間戳
long get_first_day_of_month_by_month(int month){
time_t timep;
time (&timep);
struct tm *p;
p=localtime(&timep);
p->tm_mon=month-1;
p->tm_mday=1;
p->tm_hour=0;
p->tm_min=0;
p->tm_sec=0;
return mktime(p);
}
//獲取指定月份最后一天日期時(shí)間戳
long get_last_day_of_month_by_month(int month){
time_t timep;
time (&timep);
struct tm *p;
p=localtime(&timep);
p->tm_mon=month;
p->tm_mday=0;
p->tm_hour=0;
p->tm_min=0;
p->tm_sec=0;
return mktime(p);
}
//獲取指定年份的第一天的日期時(shí)間戳
long get_first_day_of_month_by_year(int year){
time_t timep;
time (&timep);
struct tm *p;
p=localtime(&timep);
p->tm_year=year-1900;
p->tm_mon=0;
p->tm_mday=1;
p->tm_hour=0;
p->tm_min=0;
p->tm_sec=0;
return mktime(p);
}
//獲取指定年份最后一天日期時(shí)間戳
long get_last_day_of_month_by_year(int year){
time_t timep;
time (&timep);
struct tm *p;
p=localtime(&timep);
p->tm_year=year-1900;
p->tm_mon=11;
p->tm_mday=31;
p->tm_hour=0;
p->tm_min=0;
p->tm_sec=0;
return mktime(p);
}
//獲取指定日期當(dāng)周第一天的日期時(shí)間戳
long get_first_day_of_week_by_timestamp(long timestamp){
time_t timep;
timep = timestamp;
struct tm *p;
p=localtime(&timep);
p->tm_mday=p->tm_mday-p->tm_wday;
p->tm_hour=0;
p->tm_min=0;
p->tm_sec=0;
return mktime(p);
}
//獲取指定日期當(dāng)周最后一天的日期時(shí)間戳
long get_last_day_of_week_by_timestamp(long timestamp){
time_t timep;
timep = timestamp;
struct tm *p;
p=localtime(&timep);
p->tm_mday=p->tm_mday+(6-p->tm_wday);
p->tm_hour=0;
p->tm_min=0;
p->tm_sec=0;
return mktime(p);
}
//獲取今天是本月的第幾天
int get_day_of_month(){
time_t timep;
time (&timep);
struct tm *p;
p=localtime(&timep);
return p->tm_mday;
}
//獲取今天是本年的第幾天
int get_day_of_year(){
time_t timep;
time (&timep);
struct tm *p;
p=localtime(&timep);
return p->tm_yday;
}
//獲取今天是本周的第幾天
int get_day_of_week(){
time_t timep;
time (&timep);
struct tm *p;
p=localtime(&timep);
return p->tm_wday;
}
//獲取今天是本季度的第幾天
int get_day_of_season(){
time_t timep;
time (&timep);
struct tm *p;
p=localtime(&timep);
int month = p->tm_mon;
int day = p->tm_mday;
if(month>=0&&month<=2){
return day;
}else if(month>=3&&month<=5){
return day+31;
}else if(month>=6&&month<=8){
return day+31+30;
}else{
return day+31+30+31;
}
}
//獲取指定時(shí)間的開始時(shí)間的日期時(shí)間戳 (也就是指定時(shí)間的00:00:00)
long get_start_time_of_day(long timestamp){
time_t timep;
timep = timestamp;
struct tm *p;
p=localtime(&timep);
p->tm_hour=0;
p->tm_min=0;
p->tm_sec=0;
return mktime(p);
}
//獲取指定時(shí)間的結(jié)束時(shí)間的日期時(shí)間戳 (也就是指定時(shí)間的23:59:59)
long get_end_time_of_day(long timestamp){
time_t timep;
timep = timestamp;
struct tm *p;
p=localtime(&timep);
p->tm_hour=23;
p->tm_min=59;
p->tm_sec=59;
return mktime(p);
}
//添加指定天數(shù)
long add_day(long timestamp,int day){
time_t timep;
timep = timestamp;
struct tm *p;
p=localtime(&timep);
p->tm_mday=p->tm_mday+day;
return mktime(p);
}
//添加指定月數(shù)
long add_month(long timestamp,int month){
time_t timep;
timep = timestamp;
struct tm *p;
p=localtime(&timep);
p->tm_mon=p->tm_mon+month;
return mktime(p);
}
//添加指定年數(shù)
long add_year(long timestamp,int year){
time_t timep;
timep = timestamp;
struct tm *p;
p=localtime(&timep);
p->tm_year=p->tm_year+year;
return mktime(p);
}
//添加指定小時(shí)數(shù)
long add_hour(long timestamp,int hour){
time_t timep;
timep = timestamp;
struct tm *p;
p=localtime(&timep);
p->tm_hour=p->tm_hour+hour;
return mktime(p);
}
//添加指定分鐘數(shù)
long add_minute(long timestamp,int minute){
time_t timep;
timep = timestamp;
struct tm *p;
p=localtime(&timep);
p->tm_min=p->tm_min+minute;
return mktime(p);
}
//添加指定秒數(shù)
long add_second(long timestamp,int second){
time_t timep;
timep = timestamp;
struct tm *p;
p=localtime(&timep);
p->tm_sec=p->tm_sec+second;
return mktime(p);
}
//添加指定周數(shù)
long add_week(long timestamp,int week){
time_t timep;
timep = timestamp;
struct tm *p;
p=localtime(&timep);
p->tm_mday=p->tm_mday+week*7;
return mktime(p);
}以上就是C語言實(shí)現(xiàn)時(shí)間處理工具的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于C語言時(shí)間處理工具的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C語言中隊(duì)列的結(jié)構(gòu)和函數(shù)接口的使用示例
隊(duì)列只允許一端進(jìn)行插入數(shù)據(jù)操作,在另一端進(jìn)行刪除數(shù)據(jù)操作的特殊線性表,隊(duì)列具有先進(jìn)先出FIFO的性質(zhì);隊(duì)列可用數(shù)組和鏈表 的方法實(shí)現(xiàn),使用鏈表的結(jié)構(gòu)實(shí)現(xiàn)更優(yōu)一些,因?yàn)槿绻褂脭?shù)組節(jié),出隊(duì)列時(shí)刪去首元素需要將整個(gè)數(shù)組前移,效率比較低2023-02-02
C++實(shí)現(xiàn)職工工資管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡單的職工工資管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
C++實(shí)現(xiàn)Window環(huán)境聊天室功能
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)Window環(huán)境聊天室功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06
簡要說明C語言中指針函數(shù)與函數(shù)指針的區(qū)別
這篇文章主要介紹了C語言中指針函數(shù)與函數(shù)指針的區(qū)別,指針函數(shù)和函數(shù)指針是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2016-04-04

