春分の日と秋分の日を求めるプログラムをJavaで作ってみました。(^_^;
というか、質問の【超簡単クイズ】で、昔、Cで自作したのを思い出して、参考URLの計算式で検算してみました。(^_^;
● Equinox1.java
/* * Equinox1.java */ class Equinox1 { // 春分の日(3月xx日) Vernal Equinox Day static int v_equinox(int year) { if(year< 1851 || 2150< year) return(0); // Domain Error int r=0, y=year-1800; if(y%4>=y/32%4) r++; if(100<=y && y< 127 || y==321) r++; if(y==94 || 256<=y && y< 300 && y!=288) r--; return(20+r); } // 秋分の日(9月xx日) Autumnal Equinox Day static int a_equinox(int year) { if(year< 1851 || 2150< year) return(0); // Domain Error int r=0, y=year-1852; if(year%4< y/32%4) r--; if(48<=y && y< 128 || 248<=y && y< 256) r++; if(y==-1 || y==32 || y==65) r++; return(23+r); } // 春分の日の計算式(3月XX日)検算用 static int VED(int year) { if (1851<=year && year<=1899) return (int)(19.8277+0.242194*(year-1980)-(int)((year-1983)/4)); else if (1900<=year && year<=1979) return (int)(20.8357+0.242194*(year-1980)-(int)((year-1983)/4)); else if (1980<=year && year<=2099) return (int)(20.8431+0.242194*(year-1980)-(int)((year-1980)/4)); else if (2100<=year && year<=2150) return (int)(21.851 +0.242194*(year-1980)-(int)((year-1980)/4)); return 0; } // 秋分の日の計算式(9月XX日)検算用 static int AED(int year) { if (1851<=year && year<=1899) return (int)(22.2588+0.242194*(year-1980)-(int)((year-1983)/4)); else if (1900<=year && year<=1979) return (int)(23.2588+0.242194*(year-1980)-(int)((year-1983)/4)); else if (1980<=year && year<=2099) return (int)(23.2488+0.242194*(year-1980)-(int)((year-1980)/4)); else if (2100<=year && year<=2150) return (int)(24.2488+0.242194*(year-1980)-(int)((year-1980)/4)); return 0; } public static void main(String[] args){ int year; long tm=System.nanoTime(); // Timer Start for(year=1851; year<=2150; year++) System.out.print((v_equinox(year)==VED(year)) ? 'o' : 'x'); System.out.println(); for(year=1851; year<=2150; year++) System.out.print((a_equinox(year)==AED(year)) ? 'o' : 'x'); System.out.println(); // for(year=1851; year<=2150; year++){ // System.out.printf("%4d 年の春分の日は 3 月 %2d 日, ", year, v_equinox(year)); // System.out.printf("秋分の日は 9 月 %2d 日\n", a_equinox(year)); // } tm=System.nanoTime()-tm; // Timer Stop System.out.printf("Runtime : %.3f [sec]\n",(double)tm/1e9); } }
●実行結果
oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo Runtime : 0.041 [sec]
※参考URL
●春分の日・秋分の日の計算式 - Vector
●指定した年の春分の日・秋分の日を返す関数。 | MS Access Scrapbook
●Java による祝日判定ロジック実装の試み
- 作者: 国立天文台
- 出版社/メーカー: 丸善出版
- 発売日: 2013/12/20
- メディア: 文庫
- この商品を含むブログ (1件) を見る