RECUR型の残り [iCalendar]
RECUR型のルールについて一通り見てきましたが、さらに文章は続いています。
ルールに従った際に発生するありえない日付け(2月30日とか)やローカル時刻(例が理解できません・・・)は無視し(MUST)、繰り返しの数としてカウントしない(MUST NOT)。
繰り返しのデータについて、開始日時は「DTSTART」で決まるとの事。例えば、「FREQ=YEARLY;BYMONTH=1」に日付の情報は無いが、「DTSTART」から決める事ができます・・。と言う理解が合っていれば、「DTSTART」は設定が必須なんですかね・・?
「FREQ」よりも大きい期間を示す「BYxxx」ルールは一般的には頻度を下げたり制限する方向に働き、「FREQ」よりも短い期間を示す「BYxxx」ルールは繰り返し回数を増やす方向に働く。
「BYxxx」ルールが複数指定されている場合の評価順は下記の通り。
続いて、「FREQ」ルールと「BYxxx」ルールを同時に使った際の頻度の増減関係の表が示されています。増減はともかく、利用不可のパターンもいくつか示されているので、そこだけ抜粋しておきます。
続いて、以下の例が載っています。この例をみる限り、「RRULE」はプロパティの名前の様ですね。「RRULE」プロパティでデータの繰り返しルールを指定するのでしょう。
このルールは「2年(隔年)毎の(FREQ=YEARLY;INTERVAL=2)、1月(BYMONTH=1)の毎日曜日(BYDAY=SU)の午前8時30分00秒と午前9時30分00秒(BYHOUR=8,9;BYMINUTE=30)」に発生することを示しています。秒数は「BYSECOND」が指定されていないので、「DTSTART」プロパティの値から取ってきたそうです。同様に「BYMINUTE」「BYHOUR」「BYDAY」「BYMONTHDAY」「BYMONTH」が指定されていない場合は「DTSTART」プロパティから適宜取ってくるそうです。
後、時間の話(ローカルタイムとかタイムゾーンの話)が出てますね。こちらはまたの機会に取り上げることにします・・。
「content value encoding」は無いとのこと。なんのこっちゃ・・。3.3.11参照とのことなので、そちらを見る時に見ときましょう。
ルールに従った際に発生するありえない日付け(2月30日とか)やローカル時刻(例が理解できません・・・)は無視し(MUST)、繰り返しの数としてカウントしない(MUST NOT)。
繰り返しのデータについて、開始日時は「DTSTART」で決まるとの事。例えば、「FREQ=YEARLY;BYMONTH=1」に日付の情報は無いが、「DTSTART」から決める事ができます・・。と言う理解が合っていれば、「DTSTART」は設定が必須なんですかね・・?
「FREQ」よりも大きい期間を示す「BYxxx」ルールは一般的には頻度を下げたり制限する方向に働き、「FREQ」よりも短い期間を示す「BYxxx」ルールは繰り返し回数を増やす方向に働く。
「BYxxx」付き記載 | 「BYxxx」が無い場合 | 「BYxxx」がある場合 |
FREQ=DAILY;BYMONTH=1 | 全ての日 | 1月のすべての日 |
FREQ=YEARLY;BYMONTH=1,2 | 年に1回 | 年に1月、2月の2回 |
「BYxxx」ルールが複数指定されている場合の評価順は下記の通り。
- 「FREQ」もしくは、「INTERVAL」の評価
- 「BYMONTH」「BYWEEKNO」「BYYEARDAY」「BYMONTHDAY」「BYDAY」「BYHOUR」「BYMINUTE」「BYSECOND」「BYSETPOS」の順で評価
- 「COUNT」「UNTIL」の評価
続いて、「FREQ」ルールと「BYxxx」ルールを同時に使った際の頻度の増減関係の表が示されています。増減はともかく、利用不可のパターンもいくつか示されているので、そこだけ抜粋しておきます。
- 「BYWEEKNO」は「FREQ=YEARLY」のみで使用可
- 「BYYEARDAY」は「FREQ=DAILY, WEEKLY, MONTHLY」で使用不可
- 「BYMONTHDAY」は「FREQ=WEEKLY」で使用不可
続いて、以下の例が載っています。この例をみる限り、「RRULE」はプロパティの名前の様ですね。「RRULE」プロパティでデータの繰り返しルールを指定するのでしょう。
DTSTART;TZID=America/New_York:19970105T083000 RRULE:FREQ=YEARLY;INTERVAL=2;BYMONTH=1;BYDAY=SU;BYHOUR=8,9;BYMINUTE=30 |
このルールは「2年(隔年)毎の(FREQ=YEARLY;INTERVAL=2)、1月(BYMONTH=1)の毎日曜日(BYDAY=SU)の午前8時30分00秒と午前9時30分00秒(BYHOUR=8,9;BYMINUTE=30)」に発生することを示しています。秒数は「BYSECOND」が指定されていないので、「DTSTART」プロパティの値から取ってきたそうです。同様に「BYMINUTE」「BYHOUR」「BYDAY」「BYMONTHDAY」「BYMONTH」が指定されていない場合は「DTSTART」プロパティから適宜取ってくるそうです。
後、時間の話(ローカルタイムとかタイムゾーンの話)が出てますね。こちらはまたの機会に取り上げることにします・・。
「content value encoding」は無いとのこと。なんのこっちゃ・・。3.3.11参照とのことなので、そちらを見る時に見ときましょう。
RECUR型のBYDAYルール [iCalendar]
今回は、前回読み切れなかった「BYDAY」ルールについてです。
前回も記載した通り、このルールは週内の曜日をCOMMA(0x2c)で区切って指定するのですが、他のルールとの組み合わせが多少複雑となっています。書式を再度載せておきます。
書式を見てわかります通り、曜日の前に整数で修飾することで何番目の曜日かを指定することもできます。整数で修飾されている時の解釈は「FREQ」の設定内容によって、次の様に変わってくる様です。
なお、整数で修飾されていない場合、周期内の全ての対象日を示します。例えば、「MONTHLY」ルールの場合、「BYDAY=MO」の様な表記は月内のすべての月曜日を示します。
う〜ん、最初読んだ時には理解不能だったんですが、何となく整理できましたかね〜。
前回も記載した通り、このルールは週内の曜日をCOMMA(0x2c)で区切って指定するのですが、他のルールとの組み合わせが多少複雑となっています。書式を再度載せておきます。
( weekdaynum *("," weekdaynum) ) weekdaynum = [["+" / "-"] 1*2DIGIT] weekday ; 1-53 weekday = "SU" / "MO" / "TU" / "WE" / "TH" / "FR" / "SA" |
書式を見てわかります通り、曜日の前に整数で修飾することで何番目の曜日かを指定することもできます。整数で修飾されている時の解釈は「FREQ」の設定内容によって、次の様に変わってくる様です。
FREQ | 整数による修飾の解釈 | |||
MONTHLY | +1MO or 1MO | 月内の第一月曜日 | ||
-1MO | 月内の最終月曜日 | |||
YEARY | BYMONTH有り | +1MO or 1MO | 月内の第一月曜日 | -1MO | 月内の最終月曜日 |
BYWEEKNO有り | 整数による修飾はしない(MUST NOT) | |||
上記以外 | +1MO or 1MO | 年内の第一月曜日 | -1MO | 年内の最終月曜日 |
上記以外 | 整数による修飾はしない(MUST NOT) |
なお、整数で修飾されていない場合、周期内の全ての対象日を示します。例えば、「MONTHLY」ルールの場合、「BYDAY=MO」の様な表記は月内のすべての月曜日を示します。
う〜ん、最初読んだ時には理解不能だったんですが、何となく整理できましたかね〜。
RECUR型 [iCalendar]
ずいぶんと飛びましたが、iCalendarの型についての続きです。前回はしょった、RECUR型について、ここでまとめておきます。
この型は、繰り返しのルールを記述するための型だとのことです。各ルールについて、あらためて表にまとめてみます。って、前回の表(と言うかそれ以前のも・・)は Windows 上では端が切れる場合がありますね・・。その場合、フォントを小さくすれば収まる様なので試してみてください。
なお、各ルールは次の規則で指定します。
以下、各ルールについてざっと読んで行きます。
以上、「BYDAY」を除いて、各ルールの記載箇所をざっと読んで行きました。「BYDAY」は長かったので、次回扱おうと思います。おそらく、あらゆるパターンの繰り返しに対応するためだと思うのですが、結構複雑ですねぇ・・。最終的にちゃんとまとめないと何が、どうなってるのかさっぱりと言う感じですね。
ちなみに、頻繁に出てきた「RRULE」についても、今のところ不明です(私の中で・・)。
この型は、繰り返しのルールを記述するための型だとのことです。各ルールについて、あらためて表にまとめてみます。って、前回の表(と言うかそれ以前のも・・)は Windows 上では端が切れる場合がありますね・・。その場合、フォントを小さくすれば収まる様なので試してみてください。
なお、各ルールは次の規則で指定します。
- 複数のルールを組み合わせて指定する
- 個々のルールは「NAME=VALUE」の形で記載
- 各ルールはSEMICOLON(0x3b)で区切る
- ルールの記載は順不同
- 「FREQ」は必須。それ以外はオプション。
- 「UNTIL」と「COUNT」は同時使用不可(MUST NOT)
- 全てのルールについて、記載は1度のみ(MUST)
- 過去のアプリとの互換性のため「FREQ」はルールの先頭に記載する(MUST)
以下、各ルールについてざっと読んで行きます。
FREQ | 必須。繰り返しのルールを指定する。必ず先頭に記載(MUST)。複数の指定は不可(MUST NOT)。 | |
SECONDLY | 秒間隔の繰り返し | |
MINUTELY | 分間隔の繰り返し | |
HOURLY | 時間間隔の繰り返し | |
DAILY | 日にち感覚の繰り返し | |
WEEKLY | 週間隔の繰り返し | |
MONTHLY | 月間隔の繰り返し | |
YEARLY | 年間隔の繰り返し | |
UNTIL | DATEもしくはDATE-TIME型で繰り返しの最終期日を指定。「DTSTART」プロパティと同じ型で指定(MUST)。「STANDARD」「DAYLIGHT」サブコンポーネントの場合、UTC timeで記載(MUST)。DATE-TIME型で指定した場合、UTC time formatで記載(MUST)。「COUNT」との同時使用は不可(MUST NOT)。「UNTIL」も「COUNT」も設定されていない場合、「RRULE」は永遠に繰り返されると考慮される(?)。 | |
date | ||
date-time | ||
COUNT | 発生回数を示す。「DTSTART」プロパティの値が最初の発生時点となる。 | |
1*DIGIT | ||
INTERVAL | 正の整数で繰り返しの間隔を指定。デフォルト値は「1」。単位は「FREQ」に依存する。 | |
1*DIGIT | ||
BYSECOND | 1分の中の秒をCOMMA(0x2c)で区切って記載したリスト。 「DTSTART」プロパティがDATE型の場合、この型は使用しない(MUST NOT)。 使用された場合は無視する(MUST)。 | |
( 1*2DIGIT *("," 1*2DIGIT) ) ; 0-60 | ||
BYMINUTE | 1時間の中の分をCOMMA(0x2c)で区切って記載したリスト。 「DTSTART」プロパティがDATE型の場合、この型は使用しない(MUST NOT)。 使用された場合は無視する(MUST)。 | |
( 1*2DIGIT *("," 1*2DIGIT) ) ; 0-59 | ||
BYHOUR | 1日の中の時をCOMMA(0x2c)で区切って記載したリスト。 「DTSTART」プロパティがDATE型の場合、この型は使用しない(MUST NOT)。 使用された場合は無視する(MUST)。 | |
( 1*2DIGIT *("," 1*2DIGIT) ) ; 0-23 | ||
BYDAY | 1週間の中の曜日をCOMMA(0x2c)で区切って記載したリスト。曜日の前に整数で修飾することで何番目の曜日かを指定することもできる。詳細は別途扱います。 | |
( weekdaynum *("," weekdaynum) ) weekdaynum = [["+" / "-"] 1*2DIGIT] weekday ; 1-53 weekday = "SU" / "MO" / "TU" / "WE" / "TH" / "FR" / "SA" | ||
SU | Sunday | |
MO | Monday | |
TU | Tuesday | |
WE | Wednesday | |
TH | Thursday | |
FR | Friday | |
SA | Saturday | |
BYMONTHDAY | 月内の日付をCOMMA(0x2c)で区切って指定。負の値は月末からカウントした日付を示す。例えば-10だと月末から前に10日目の日となる。FREQルールが「WEEKLY」の場合は本ルールは指定されない(MUST NOT)。 | |
( monthdaynum *("," monthdaynum) ) monthdaynum = ["+" / "-"] 1*2DIGIT ; 1-31 | ||
BYYEARDAY | 年内の日付をCOMMA(0x2c)で区切って指定。負の値は年末(12月31日)からの日付を示す。 例えば、-306は3月1日。「FREQ」ルールが「DAILY」「WEEKLY」「MONTHLY」に設定されている場合は本ルールは指定しない。 | |
( yeardaynum *("," yeardaynum) ) yeardaynum = ["+" / "-"] 1*3DIGIT ; 1-366 | ||
BYWEEKNO | 年内の週番号をCOMMA(0x2c)で区切って指定。週番号はISO.8601.2004に定義されている。「週」は7日周期で、週の始まりの曜日は「WKST」で指定する。「FREQ」が「YEARLY」以外の場合は使用しない(MUST NOT)。 | |
["+" / "-"] 1*2DIGIT ; 1-53 | ||
BYMONTH | 年内の月をCOMMA(0x2c)で区切って指定。 | |
( = 1*2DIGIT *("," = 1*2DIGIT) ) ; 1-12 | ||
BYSETPOS |
繰り返しのルールの中で、特定の位置を示す数をCOMMA(0x2c)で区切って指定する。負の値は最後からの相対位置となる。他の「BYxxx」ルールと一緒に使う(MUST)。 例えば、「月内の最終仕事日」は下記の様に示す。 FREQ=MONTHLY;BYDAY=MO,TU,WE,TH,FR;BYSETPOS=-1 | |
( ["+" / "-"] 1*2DIGIT *("," ["+" / "-"] 1*2DIGIT) ) ; 1-366 | ||
WKST | 週の開始日を指定。「RRULE」が1以上、「BYDAY」ルールが指定されている場合や、「RRULE」が「YEARLY」で「BYWEEKNO」ルールが記載されているに重要になる。デフォルト値は「MO」 | |
"SU" / "MO" / "TU" / "WE" / "TH" / "FR" / "SA" |
以上、「BYDAY」を除いて、各ルールの記載箇所をざっと読んで行きました。「BYDAY」は長かったので、次回扱おうと思います。おそらく、あらゆるパターンの繰り返しに対応するためだと思うのですが、結構複雑ですねぇ・・。最終的にちゃんとまとめないと何が、どうなってるのかさっぱりと言う感じですね。
ちなみに、頻繁に出てきた「RRULE」についても、今のところ不明です(私の中で・・)。
リポジトリからのチェックアウト [Git]
前回でようやくリポジトリができたと思ってますが、さっそくMacにその内容をコピーしたいと思います。それを「チェックアウト」と言うのかどうか良くわかっていませんでしたが、「コピー」と言うのが近い様ですね。チュートリアルによると、「clone」と言うコマンドを利用しています。
と言う事で、さっそく実行してみます。
「/Volume/share/src/sdtool/SDTool」はMac側から見ているNetWalker上のリポジトリのあるディレクトリ、「SDTool」はコピー先でMac上のリポジトリとなるディレクトリです。あっさりコピーできました。と言う事で、個人で利用する範囲ではサーバの立ち上げは不要ですね。なお、コピー先のディレクトリは無ければ自動で作成するとの記載があったので、わざとディレクトリを作成せずに試してみましたが、ちゃんと自動で作成されました。
コピー先のディレクトリにはコミットされていたファイルと共に「.git」と言うファイルができています。これは、Finder上では見えないので、ターミナルで確認する必要がありました。
さて、コピーができたので、さっそくMac上でも動作を確かめます。Qt Creator上でプロジェクトを開き、ビルド&実行してみたところ、問題なくウィンドウが立ち上がりました。
コミットしたファイルに問題無し
なお、NetWalkerでコミットしたファイルは下記の通りです。
上段はQt Creatorが自動で作成したファイル群、下段が私が作成したファイルです。ま、これで問題が無かったと言う事で。ようやくMac上で開発する事ができますね。
つづく。
と言う事で、さっそく実行してみます。
git clone /Volume/share/src/sdtool/SDTool SDTool |
「/Volume/share/src/sdtool/SDTool」はMac側から見ているNetWalker上のリポジトリのあるディレクトリ、「SDTool」はコピー先でMac上のリポジトリとなるディレクトリです。あっさりコピーできました。と言う事で、個人で利用する範囲ではサーバの立ち上げは不要ですね。なお、コピー先のディレクトリは無ければ自動で作成するとの記載があったので、わざとディレクトリを作成せずに試してみましたが、ちゃんと自動で作成されました。
コピー先のディレクトリにはコミットされていたファイルと共に「.git」と言うファイルができています。これは、Finder上では見えないので、ターミナルで確認する必要がありました。
さて、コピーができたので、さっそくMac上でも動作を確かめます。Qt Creator上でプロジェクトを開き、ビルド&実行してみたところ、問題なくウィンドウが立ち上がりました。
コミットしたファイルに問題無し
なお、NetWalkerでコミットしたファイルは下記の通りです。
project.pro, main.cpp, mainwindow.cpp, mainwindow.h, mainwindow.ui sdtoolmain.cpp, sdtoolview.cpp, sdtoolmain.h, sdtoolview.h |
上段はQt Creatorが自動で作成したファイル群、下段が私が作成したファイルです。ま、これで問題が無かったと言う事で。ようやくMac上で開発する事ができますね。
つづく。