These days we have been reading and tring to comprehend the source of the program datrdcol. But, the complexicity beyonds our mind.
There is a program to calculate the previoue day of a day. That is from this project.
//calTodayDate.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define GKCMN_OK 0
#define GKCMN_NG -1
typedef struct{
int year; /* 年 */
int month; /* 月 */
int day; /* 日 */
int hour; /* 時 */
int min; /* 分 */
}GSDATCMNdate;
int DATCMNCalcDate( GSDATCMNdate *srcdate, GSDATCMNdate *objdate, GSDATCMNdate *calc )
{
struct tm *calcdate; /* mktimeをする為のtm構造体データ */
time_t timeerr; /* mktimeの処理結果 */
time_t gtime;
int ret; /* 関数リターン */
ret = GKCMN_OK;
/* 計算用calcdateの初期設定として、システム時刻をセットする */
time( >ime );
calcdate = localtime(>ime);
/* カレンダタスクの時間±差分時間を、tm構造体にセット */
calcdate->tm_year = srcdate->year - 1900 + calc->year;
calcdate->tm_mon = srcdate->month - 1 + calc->month;
calcdate->tm_mday = srcdate->day + calc->day;
calcdate->tm_hour = srcdate->hour + calc->hour;
calcdate->tm_min = srcdate->min + calc->min;
calcdate->tm_sec = 0;
/* 日付変換 */
timeerr = mktime( calcdate );
/* 正常に変換できた場合、レスポンス用データ領域にセット */
if( timeerr != GKCMN_NG )
{
objdate->year = calcdate->tm_year + 1900;
objdate->month = calcdate->tm_mon + 1;
objdate->day = calcdate->tm_mday;
objdate->hour = calcdate->tm_hour;
objdate->min = calcdate->tm_min;
}
else
{
ret = GKCMN_NG;
}
return( ret );
}
int DATRDGetMakeDate( GSDATCMNdate *basedate, short stime_of_aday, GSDATCMNdate *makedate )
{
int ret;
GSDATCMNdate calcdate; /* 本日からの差分セット用 */
/* 計算用エリアの初期化 */
memset( &calcdate, 0, sizeof( calcdate ) );
/* 取得日付は-1日であるため、dayに-1をセット */
calcdate.day = (-1);
/* 取得日付の締め時を求める( 本日の開始時 -1 ) */
calcdate.hour = ( ((basedate->hour + 24) - stime_of_aday) % 24 ) - 1;
/* 日付計算 */
ret = DATCMNCalcDate( basedate, makedate, &calcdate );
/* 時刻は,通知時刻とする */
makedate->hour = basedate->hour;
makedate->min = basedate->min;
return( ret );
}
int main() {
GSDATCMNdate now_date;
GSDATCMNdate make_date;
memset(&now_date, 0, sizeof(GSDATCMNdate));
memset(&make_date, 0, sizeof(GSDATCMNdate));
now_date.year = 2009;
now_date.month = 5;
now_date.day = 14;
now_date.hour = 23;
now_date.min = 59;
DATRDGetMakeDate(&now_date, 2, &make_date);
printf("year: %d/n", make_date.year);
printf("month: %d/n", make_date.month);
printf("day: %d/n", make_date.day);
printf("hour: %d/n", make_date.hour);
printf("min: %d/n", make_date.min);
return 0;
}
May 14th Thursday (五月 十四日 木曜日)
最新推荐文章于 2021-12-18 14:48:30 发布