日付 時間 (C 言語)

C 言語では、日付や時間は、それなりの関数が用意されている。 そこで、日付 時刻 経過時間 を引数で受け取って その時の日時を出力するサンプルプログラムを作った。(2018.2.9)
ソースへのリンクは datetime_sec_2Data.c
コンパイルは、cc datetime_sec_2Data.c -lm
実行時には、 ./a.out 18-01-24 13:08:26 2.34500E+00
などとする、この結果は 
2018/01/24 13:08:28.345
である。フォーマット、秒の小数点以下の有効数字など適当に直して使う必要がある。
#include 
#include 
#include 
#include 
#include 
#define MAXLINE 1024
//  '18-01-24 13:08:26   +   1.00000E+00  ->   YYYY/mm/dd HH:MM:SSS.S
// ./a.out 18-01-24 13:08:26  1.00000E+00
// output :   YYYY/mm/dd HH:MM:SSS.S

int main( int argc, char *argv[] )
{
	time_t tt;
	static struct tm  time_st;
	int year, month, day, hour, minute;
        double sec, dsec;
        double elapsedtime;
        int i;
        char buf[MAXLINE];
         

        sscanf( argv[3], "%lf", &elapsedtime );


        i = 0;
        while( !isdigit(*(argv[1]+i) ) && (i<8) ) i++;

        sscanf( (argv[1]+i), "%d-%d-%d", &year, &month, &day );
        sscanf( (argv[2]), "%d:%d:%lf", &hour, &minute, &sec );

	        time_st.tm_gmtoff = 0;
		time_st.tm_year = year + 100;
                time_st.tm_mon = month-1;
		time_st.tm_mday = day;
                time_st.tm_hour = hour;
		time_st.tm_min = minute;
                time_st.tm_sec = sec + elapsedtime;
                dsec = (sec + elapsedtime) - time_st.tm_sec;


	tt = mktime( &time_st );
//	fprintf(stdout, "%ld : ", tt );
//	fprintf(stdout, "%s ", ctime( &tt ));
        strftime( buf, MAXLINE, "%Y/%m/%d %H:%M:%S", &time_st );
        fprintf( stdout, "%s.", buf );
        fprintf( stdout, "%03d\n", (int)round((1000*dsec)) );



	return 0;
}

玉川のソフトのページへ , 研究室の研究用情報の頁へ , 研究室のページへ