struct tmとtimeでtは、日付間の間隔日数を計算する
2930 ワード
標準ライブラリで提供されるstruct tmタイプの変数とtime_を使用tタイプの変数は、時間を比較的便利に処理できます.
処理時間のclassを書きました.
次のstruct tm構造体とtime_を用いた.tタイプの変数.
1. struct tm
標準C/C++では、timeにおけるtm構造により日付と時間を得ることができる.hの定義は以下の通りである.
ANSI C規格では、tm構造を用いたこの時間を分解時間(broken-down time)と呼ぶ.
2. time_t
time.hヘッダファイルにはtime_tは、パラメータタイプまたは戻り値タイプの関数です.
time_でtが示す時間(カレンダー時間)は、1つの時点(1970年1月1日0時0分0秒)からその時点までの秒数である.
time.hでtime_が見えますtは長い整数です.
3.2日間の間隔日数を計算するカスタムclass.
例えば20120601と20120604の2日間の間隔日数は3日間である.ヘッダファイルh
CPPファイル、DateOffset.cpp
処理時間のclassを書きました.
次のstruct tm構造体とtime_を用いた.tタイプの変数.
1. struct tm
標準C/C++では、timeにおけるtm構造により日付と時間を得ることができる.hの定義は以下の通りである.
#ifndef_TM_DEFINED
structtm {
int tm_sec; /* – [0,59] */
int tm_min; /* - [0,59] */
int tm_hour; /* - [0,23] */
int tm_mday; /* - [1,31] */
int tm_mon; /* ( ,0 ) - [0,11] */
int tm_year; /* , 1900 */
int tm_wday; /* – [0,6], 0 ,1 , */
int tm_yday; /* 1 1 – [0,365], 0 1 1 ,1 1 2 , */
int tm_isdst; /* , ,tm_isdst 。 ,tm_isdst 0; ,tm_isdst() 。*/
};
#define_TM_DEFINED
#endif
ANSI C規格では、tm構造を用いたこの時間を分解時間(broken-down time)と呼ぶ.
2. time_t
time.hヘッダファイルにはtime_tは、パラメータタイプまたは戻り値タイプの関数です.
doubledifftime(time_t time1, time_t time0);
time_tmktime(struct tm * timeptr);
time_ttime(time_t * timer);
char* asctime(const struct tm * timeptr);
char* ctime(const time_t *timer);
time_でtが示す時間(カレンダー時間)は、1つの時点(1970年1月1日0時0分0秒)からその時点までの秒数である.
time.hでtime_が見えますtは長い整数です.
#ifndef_TIME_T_DEFINED
typedeflong time_t;
#define_TIME_T_DEFINED
#endif
3.2日間の間隔日数を計算するカスタムclass.
例えば20120601と20120604の2日間の間隔日数は3日間である.ヘッダファイルh
#include
#include
#include
#include
#include
#include
using namespace std;
#ifndef DATEOFFSET_H
#define DATEOFFSET_H
class DateOffset
{
public:
DateOffset(){}
~DateOffset(){}
int time_gap(int date1, int date2);
time_t time_maker(int date);
int current_time(time_t& current_time);
protected:
struct tm t;
time_t t_of_day1,t_of_day2;
};
#endif
CPPファイル、DateOffset.cpp
#include
#include "./DateOffset.h"
using namespace std;
int DateOffset::time_gap(int date1, int date2)
{
t_of_day1=time_maker(date1);
t_of_day2=time_maker(date2);
double diff = difftime (t_of_day1,t_of_day2);
if(diff<0)
diff=0-diff;
//60*60*24=86400
int count_gap_day=(int)diff/86400;
return count_gap_day;
}
time_t DateOffset::time_maker(int date)
{
t.tm_year=date/10000-1900;
t.tm_mon=(date-(t.tm_year+1900)*10000)/100-1;
t.tm_mday=date-(t.tm_year+1900)*10000-(t.tm_mon+1)*100;
t.tm_hour=0;
t.tm_min=0;
t.tm_sec=1;
t.tm_isdst=0;
time_t t_of_day=mktime(&t);
return t_of_day;
}
int DateOffset::current_time(time_t& currenttime)
{
struct tm * timeinfo;
timeinfo=localtime(¤ttime);
int year=timeinfo->tm_year+1900;
int month=timeinfo->tm_mon+1;
int day=timeinfo->tm_mday;
int date_current=year*10000+month*100+day;
return date_current;
}