前提・実現したいこと
strftime関数を使用し年月日を表示させたい
発生している問題・エラーメッセージ
本来
2012年01月01日と表示されるべきですが、
3912年02月01日と表示されます。
該当のソースコード
C
1#include <stdio.h> 2#include <string.h> 3#include <ctype.h> 4#include <stdlib.h> 5#include <time.h> 6#include <math.h> 7 8void mjd2data(int mjd, struct tm *data){ 9 int n, a, b; 10 n=mjd+678881; 11 //printf("n=%d",n); 12 a=4*n +3 +4*floor( 3/4.0* floor( 4*(n+1)/146067.0 ) ); 13 b=5*floor(a%1461/4.0 )+2; 14 data->tm_year=floor(a/1461.0); 15 data->tm_mon =floor(b/153.0)+3; 16 data->tm_mday=floor(b%153/5.0)+1; 17 if(12 < data->tm_mon ){ 18 data->tm_year+=1; 19 data->tm_mon-=12; 20 } 21 22} 23 24void main(){ 25 int mjd; 26 struct tm data; 27 char dc[64]={}; 28 scanf("%d",&mjd); 29 mjd2data(mjd,&data); 30 puts("hoge"); 31 printf("%4d/", data.tm_year); 32 printf("%2d/", data.tm_mon); 33 printf("%2d \n", data.tm_mday); 34 35 data.tm_hour=0; 36 data.tm_isdst=0; 37 data.tm_min=0; 38 data.tm_sec=0; 39 data.tm_wday=0; 40 data.tm_yday=0; 41 strftime(dc, 64, "%Y年%m月%d日", &data); 42 printf("%s\n",dc); 43 44}
試したこと
tm構造体にて数値を代入していない部分があるので、そこをとりあえず0で埋めたら何か変化があるかなと思ったが、特になかった。
なお、直にメンバにアクセスしての表示も併記しているがこれは想定通りの挙動を取っている。
↓0で埋めている
C
1data.tm_hour=0; 2data.tm_isdst=0; 3data.tm_min=0; 4data.tm_sec=0; 5data.tm_wday=0; 6data.tm_yday=0;
補足情報(FW/ツールのバージョンなど)
Win10 MinGW
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/15 03:25