日付 時間 (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;
}
玉川のソフトのページへ ,
研究室の研究用情報の頁へ ,
研究室のページへ