繰り返しルールは日付ではなくプログラム
RRULE:FREQ=MONTHLY;BYDAY=-1FR;COUNT=12 には日付が一つも入っていません。入っているのは日付を生み出すための手順であり、実際にはいつ起きるのかに誠実に答える唯一の方法は、その手順を実行することです。このツールはそれを実行します。
何が適用されるか
RFC 5545 §3.3.10 のすべて。FREQ、INTERVAL、COUNT、UNTIL、WKST、そして -1FR(「最後の金曜日」)のような負の序数を含む九つの BY* 部分、さらに BYSETPOS。ルールの上に EXDATE が日付を取り除き、RDATE が日付を加えます。各行はそのどちらから来たのかを示します。誰かが手で足したから存在しているだけの日付と、ルールが生んだ日付は別物だからです。
UTC オフセット列が重要な理由
毎週 9:00 の会議は、時計が切り替わっても 9:00 のままです。動くのは瞬間のほうで一時間ずれますが、壁掛け時計の読みは変わりません。それが RFC 5545 の要求であり、素朴な「7 × 86 400 000 ミリ秒を足す」が年に二度まちがえる点です。だから各回は二つの読みを並べて表示します。現地時刻と、それを生んだオフセット付きの本当の UTC の瞬間です。二つの回でオフセットが異なる場合は、その旨をはっきり示します。
タイムゾーンは、TZID が実在のゾーン名ならブラウザの IANA データベースで、そうでなければファイル内の VTIMEZONE ブロックで解決します。マイクロソフトが作った Romance Standard Time のような名前が今も正しく解決できるのはこのためです。どちらも使えないときは、黙って UTC と決めつけず「不明」と表示します。
限界をはっきり書く
終わりのないルールは、あなたが決めた上限まで展開し、結果を打ち切りとして印を付けます。実現不可能な条件を持つルール — FREQ=YEARLY;BYMONTH=2;BYMONTHDAY=30 は文法上は正しく、実在するどの日にも当たりません — は何も生みません。そのとき空の表を見せるのではなく、なぜかを述べます。
プライバシー
すべてブラウザ内で動きます。カレンダーファイルはアップロードされず、ここから通信も行いません。
Tiny Online Tools







