May 14th Thursday (五月 十四日 木曜日)

本文介绍了一个用于计算指定日期前一天的C语言程序。该程序定义了日期结构并使用mktime进行日期转换。通过调整tm结构体成员来实现日期计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  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( &gtime );
    calcdate = localtime(&gtime);
   
    /*  カレンダタスクの時間±差分時間を、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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值