喫茶XRAYトップページ

[スレッド全体
]

[12237] 指定した日が祝日かどうかを調べる返信 削除
2018/9/7 (金) 20:16:44 igy
以前、
[8163] Re5:TDateTimePicker で元号表示
http://mrxray.on.coocan.jp/bbs/DelphiBBS/mrxray_delphifan_coffe.cgi?tree=s8156#8163

で紹介した、DEKOさんのところの

指定した日が祝日かどうかを調べる
https://ht-deko.com/tech004.html#tech026

が、更新されてました!

> 2018/07/03: 五輪祝日移動法および皇室典範特例法に対応。

とのことです。

また、Qiita にも、

[Qiita] Delphi で "指定した日が祝日かどうか" を調べる
https://qiita.com/ht_deko/items/a0cbbbd899c1c016ae67

の記事が公開されています。


[12242] Re:指定した日が祝日かどうかを調べる返信 削除
2018/9/9 (日) 01:47:00 taka
▼ igyさん
> 以前、
> [8163] Re5:TDateTimePicker で元号表示
> http://mrxray.on.coocan.jp/bbs/DelphiBBS/mrxray_delphifan_coffe.cgi?tree=s8156#8163
>
> で紹介した、DEKOさんのところの
>
> 指定した日が祝日かどうかを調べる
> https://ht-deko.com/tech004.html#tech026
>
> が、更新されてました!
>
> > 2018/07/03: 五輪祝日移動法および皇室典範特例法に対応。
>
> とのことです。
>
> また、Qiita にも、
>
> [Qiita] Delphi で "指定した日が祝日かどうか" を調べる
> https://qiita.com/ht_deko/items/a0cbbbd899c1c016ae67
>
> の記事が公開されています。


毎年cao.go.jpから定期的にcsvファイルをダウンロードすると簡単かもしれません。
内閣府ホーム  >  内閣府の政策  >  制度  >  国民の祝日について
http://www8.cao.go.jp/chosei/shukujitsu/gaiyou.html#syukujitu
csv: http://www8.cao.go.jp/chosei/shukujitsu/syukujitsu_kyujitsu.csv

googleカレンダー
https://calendar.google.com/calendar/ical/japanese__ja@holiday.calendar.google.com/public/full.ics

mozillaカレンダー
https://www.mozilla.org/media/caldata/JapanHolidays.ics

mozillaカレンダーは抽出しにくいので、
最初の2つからパクってくるのが簡単だと思います



[12243] Googleカレンダーからのパクリ サンプル返信 削除
2018/9/9 (日) 01:49:25 taka
// Form に Memo1, Button1 を配置します

uses System.RegularExpressions, System.Net.HttpClient, System.StrUtils;

function getGoogleIcs() : string; forward;

procedure TForm1.Button1Click(Sender: TObject);
  var
   i, j : Integer;
   k, v : string;
   AMatchCollection : TMatchCollection;
   AStringList : TStringList;
begin
  Memo1.Clear;
  Memo1.ScrollBars := ssBoth;

  AStringList := TStringList.Create;
  try
    AMatchCollection :=  TRegEx.Matches(
        AdjustLineBreaks(getGoogleIcs()),
        'BEGIN:VEVENT\s+\n(.+?)\s+\nEND:VEVENT',
        [roSingleLine, roIgnoreCase]);
    for i := 0 to AMatchCollection.Count-1 do
    begin
      with  TRegEx.Matches(
          AMatchCollection.Item[i].Groups.Item[1].Value,
          '^(DTSTART|SUMMARY)[:;](.+)$',
          [roMultiLine, roIgnoreCase]) do
      begin
        k := '';
        v := '';
        for j := 0 to Count-1 do
        begin
          if Item[j].Groups.Item[1].Value = 'DTSTART' then
            k := TRegEx.Replace(
                      Item[j].Groups.Item[2].Value,
                      '.+DATE:', '', [roIgnoreCase])
          else
            v := Item[j].Groups.Item[2].Value;
        end;
        AStringList.Add(k + '=' + v);
      end;
    end;
    AStringList.Sort;
    if AStringList.Count > 0 then
      Memo1.Lines.Add(AStringList.Text)
    else
      Memo1.Lines.Add('取得失敗');
  finally
    AStringList.Free;
  end;
end;

function getGoogleIcs() : string;
  var
   filename, url, data : string;
   HttpClient : THTTPClient;
   response : IHTTPResponse;
   t : TDateTime;
begin
  Result := '';
  url := 'https://calendar.google.com/calendar/ical/japanese__ja@holiday.calendar.google.com/public/full.ics';
  filename := ExtractFilePath(Application.ExeName) + 'full.ics';
  if Not FileExists(filename) Or
     (FileAge(filename, t) and (t < now - 90) ) then
  begin
    HttpClient := THTTPClient.Create;
    try
      response := HttpClient.Get(url);
      if response.StatusCode = 200 then
      begin
        Result := response.ContentAsString();
        if Not ContainsText(Result, 'BEGIN:VEVENT') then
           Result := '';
      end;
      if Length(Result)>0 then
        with TFileStream.Create(filename, fmCreate) do
        try
          CopyFrom(response.ContentStream, -1);
        finally
          Free;
        end;
    finally
      HttpClient.Free;
    end;
  end;
  if Length(Result)>0 then
    Exit;

  if FileExists(filename) then
    with TBytesStream.Create() do
    try
      LoadFromFile(filename);
      Result := UTF8ToString(RawByteString(bytes));
    finally
      Free;
    end;
end;

[12244] Re:Googleカレンダーからのパクリ サンプル返信 削除
2018/9/9 (日) 21:31:03 Mr.XRAY
▼ takaさんどうもです.

ネットに接続されていれば googleカレンダー のは便利ですね.
google のもそうですが,内閣府のも,こんなのがあるなんて知りませんでした.
なるほど.

サンプルプログラム集の [164] [165] を新しいコード (といっても DEKO さんの
コードのコピペですが ) に更新しました.
また,日付時刻入力コンポの記事に以下を追加しました.

[指定した日が祝日かどうかを調べる]
http://mrxray.on.coocan.jp/Delphi/plDateEdit/Hints_Troubles.htm#94



[12245] Re2:Googleカレンダーからのパクリ サンプル返信 削除
2018/9/9 (日) 22:58:02 taka
▼ Mr.XRAYさん
> ▼ takaさんどうもです.
>
> ネットに接続されていれば googleカレンダー のは便利ですね.
> google のもそうですが,内閣府のも,こんなのがあるなんて知りませんでした.

今年の3月必要だったので調べて発見しました

http://www.data.go.jp/data/dataset/cao_20160323_0068
ここの情報によると
2016年2月からcsv配布が始まったようです。



[12246] Re3:Googleカレンダーからのパクリ サンプル返信 削除
2018/9/9 (日) 23:15:54 Mr.XRAY
▼ takaさん

> http://www.data.go.jp/data/dataset/cao_20160323_0068
> ここの情報によると
> 2016年2月からcsv配布が始まったようです。


比較的新しいとも言えますね.
いずれにしても貴重です.


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82