ニューヨーク時間を得る関数を作っています。
3月の第2日曜日、11月の第1日曜日を得るエレガントな方法はありますか?
//ニューヨーク時間(夏時間:3月第2日曜午前2時〜11月第1日曜午前2時)
function TForm1.NYtime(jpnT: TDateTime): string;
var intNum,j:integer;
date1st,dateInit,dateTerm:Tdatetime;
begin
date1st:=encodedatetime(Yearof(jpnT),Monthof(jpnT),1,0,0,0,0);//月の初日
intNum:=dayoftheweek(date1st);//月の初日の曜日(0..6)
j:=15-intNum; if j=15 then j:=8;
dateInit:=encodedatetime(Yearof(jpnT), 3,j,2,0,0,0);//3月の第2日曜日午前2時
j:=8-intNum ; if j=8 then j:=1;
dateTerm:=encodedatetime(Yearof(jpnT),11,j,2,0,0,0);//11月の第1日曜日午前2時
if (jpnT>dateInit) or (jpnT<dateTerm) then
result:=datetimetostr(inchour(jpnT,-14))
else
result:=datetimetostr(inchour(jpnT,-13))
end;
ざっとヘルプを見たところだとEncodeDayOfWeekInMonthというのがあるようです。
参考までに、月の初日のDate値はStartOfAMonthとかStartOfTheMonthでも取れます。
EncodeDayOfWeekInMonthで即でした。
長い名様、ありがとうございました。
ツイート | ![]() |