2018/9/13 (木) 01:50:32 taka |
wikipediaの春分秋分コード表と比べると下記の違いが検出されました
https://ja.wikipedia.org/wiki/春分#日付
2055= 3/21 (year mod 4 = 3)
error 2055/3/20 | 春分の日
2088= 3/20 (year mod 4 = 0)
error 2088/3/19 | 春分の日
2074= 9/23 (year mod 4 = 2)
error 2074/9/22 | 秋分の日
確認コード
function Syunbunday(y : word) : word;
begin
// 春分日 対応期間: 1924-2091
// 参考ソース https://ja.wikipedia.org/wiki/春分#日付 , 17世紀から24世紀
Result := 20;
case y mod 4 of
0 : if (y < 1960) then Result := 21;
1 : if (y < 1992) then Result := 21;
2 : if (y < 2024) then Result := 21;
3 : if (y < 2056) then Result := 21;
end;
end;
function Syuubunday(y : word) : word;
begin
// 秋分日 対応期間: 1900-2099
// 参考ソース https://ja.wikipedia.org/wiki/秋分#日付 , 17世紀から24世紀
Result := 23;
if (y < 2012) then
begin
if (y < 1980) then
case y mod 4 of
1 : if (y < 1920) then Result := 24;
2 : if (y < 1948) then Result := 24;
3 : if (y < 1980) then Result := 24;
end
end
else
begin
Result := 22;
case y mod 4 of
1 : if (y < 2044) then Result := 23;
2 : if (y < 2076) then Result := 23; // 2074(22又は23日)
3 : Result := 23;
end
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i, year, xday : integer;
s : string;
begin
Memo1.Clear;
for year := 1949 to 2091 do
begin
xday := Syunbunday(year);
s := '';
IsSpecialHoliday(EncodeDate(year,3,xday), s);
if ContainsStr(s, '春') then
Continue;
Memo1.Lines.Add(Format('%d= 3/%d (year mod 4 = %d)' , [year, xday, year mod 4]));
for xday := 19 to 23 do
if IsSpecialHoliday(EncodeDate(year,3,xday), s) then
Memo1.Lines.Add(Format(' error %d/3/%d | %s' , [year, xday, s]));
end;
Memo1.Lines.Add('');
for year := 1948 to 2099 do
begin
xday := Syuubunday(year);
s := '';
IsSpecialHoliday(EncodeDate(year,9,xday), s);
if ContainsStr(s, '秋') then
Continue;
Memo1.Lines.Add(Format('%d= 9/%d (year mod 4 = %d)' , [year, xday, year mod 4]));
for xday := 22 to 24 do
if IsSpecialHoliday(EncodeDate(year,9,xday), s) then
Memo1.Lines.Add(Format(' error %d/9/%d | %s' , [year, xday, s]));
end;
end;
|
|