くろごま語録

くろごまが何か綴るとこ

今でしょbotに日付時刻計算機能を付けた

タイトルの通り、今でしょbot@itsu_ima)にリプライを送ると日付や時刻を計算してくれる機能を付けました。

どういうリプライを送ればよいか

今でしょbotが受け入れられる質問文は、大きく分けて1つか2つか3つの部分からなります。

  1. 条件(必須)
  2. 疑問詞(省略可)
  3. まほうのじゅもん(省略可)

1.の条件については後で詳しく説明します。

2.の疑問詞は「いつ」とするか、「何年」「何月」「何日」「何曜日」「何時」「何分」「何秒」のどれかをいくつも続けることができます。この疑問詞に応じて、たとえば最後が「何年」だった場合は「XXXX年でしょ!」と答えてくれたりします。でも最後しか見ていないので「何時何分何秒何月何日」と尋ねても「XXXX年X月X日(曜)でしょ!」としか答えてくれません。ここを「いつ」としたり省略したりした場合は、1.の条件に応じて適切なところまで答えてくれます。

3.のまほうのじゅもんは、「地球が何回回った時」です。小学生っぽくひらがなだったりしても OK。宇宙人っぽくカタカナだと NG。ただし、このじゅもんはあってもなくても効果はありません(つまり、何回回った時かは教えてくれません)。

また、最後に「ですか」とか「?」や「!」とかを続けることもできます。文末がどんな形であっても、今でしょbotは「〜でしょ!」の形で答えてくれます。この形式の質問文でなかったり、1.の条件で対応していないコマンドが使われていたりすると、適当な返事(「今でしょ!」とか「いつやるか?」とか)が返ってきます。

1.の条件の詳細

どんな時間を計算するかを指定します。末尾は「は」「って」「たら」のどれかである必要があります。「先週の金曜日の午後3時から4時間後より3分前は」というふうに「の」「から」「より」でコマンドを繋げます。コマンドを使って、「基準時刻」を変更することができます。「基準時刻」は初めは計算開始時点の時刻であり、コマンドで変更したあとの「基準時刻」が最終的な答えになります。2015年5月24日時点で利用可能なコマンドは以下の通りです。(今後詳細な仕様は予告なく変更することがあります。)

今日今週今月今年、など
何もしません。
例:から3年前は、先週の今日
、など
何もしません。
例:今日から3年前のの日付って
の、の、これそれ、など
何もしません。
例:昨日のの前の日は、それから30年後の2月1日って
時刻日付
何もしません。
例:1時間前の時刻
だいたいちょうど、など
何もしません。コマンドの途中にあっても無視されます。
例:ちょうど4ヶ月前の今からだいたい1時間くらい前の2分後は
昨日一昨日明日明後日、など
1日前、2日前、1日後、2日後、などと同等です。
去年一昨年来年再来年、など
1年前、2年前、1年後、2年後、などと同等です。
先週来週再来週、など
基準時刻をその7日前、7日後、14日後、などにします。
先月来月再来月
基準時刻の月の数字をそれぞれ−1、1、2だけ増やします。元の基準時刻が月末であった場合は、日の数字が変わることがあります(月の数字が−1、1、2だけ増えることは保証されます)。例えば、基準時刻が3月31日だった場合に「来月」を実行すると、基準時刻は(4月31日=5月1日ではなく)4月のどこかになります。(実際には4月1日になるはずです。)
例:先月の5日は
先の〜次の〜、など
〜には「年」「月」「週」「日」が入ります。昨年、来年、先月、来月、などと同じです。
n日前(後)n時間前(後)n分前(後)n秒前(後)、など
基準時刻をそれだけずらします。nは整数です。使用例は↓。
nか月前(後)n年前(後)、など
基準時刻の月または年の数字にnを足したり引いたりします。nは整数です。ただし、月末の場合、たとえば3月31日の「1ヶ月後」は4月31日=5月1日となり、うるう年の2月29日の「1年後」は3月1日となるのでご注意ください。↑と同時に指定できます。
例:今より3ヶ月と2日と3時間4分間前
h:mm:ss前(後)
h時間mmss秒間だけ基準時刻をずらします。:ssの部分は省略できます。これも↑と同時に指定できます。
例:今から5日と2:33後の時刻は
〜が経つ前経過する前経った後経過した後、など
〜前、〜後に同じです。
例:これから2週間を経た後の日付は(=これから2週間後の日付は)
〜が経ったら経過したら過ぎたらしたら、など
〜後に同じです。
例:3時間したら
日曜日月曜日、など
基準時刻がある週(日曜日に始まり土曜日で終わる)のその曜日に日付を変更します。「曜日」は単に「曜」とすることもできます。
例:先週の金曜
YYYY-M-D
基準時刻の日付をYYYYMD日に変更します。YYYY-の部分は省略できますが、指定する場合は必ず(符号を除き)4桁でなければなりません。3桁以下の年は先頭に0を付けて4桁で指定し、5桁以上の年を指定したい場合は後述の「Y年」で指定してください。また、区切りには「-」「.」「/」「・」のどれかを使用できます(混在しても構いません)。
h:mm:ss
基準時刻の時刻をh:mm:ssに変更します。:ssの部分は省略できます(:00と見なされます)。
YMDhms
基準時刻の年・月・日・時・分・秒をそれぞれ変更します。
元日
1月1日に同じです。
午前hAMh、など
基準時刻の時をhを12で割った余りに変更します。
午後hPMh、など
基準時刻の時をhを12で割った余りに12を足した値に変更します。したがって、午後12時00分00秒は正午を指します。
午前AM、など
後に「h時」が続かない場合は、基準時刻の時を12で割った余りに変更します。
例:12:00 a.m.(=0時00分00秒。真夜中のことです)
午後PM、など
後に「h時」が続かない場合は、基準時刻の時を12で割った余りに12を足した値に変更します。
例:12:00 p.m.(=12時00分00秒。正午のことです)
明治n大正n昭和n平成n紀元前n
基準時刻の年を適切に変更します。n自然数または「元」です。nに上限はありません(昭和65年は平成2年として計算されます)。また、YYYY-M-Dからここまでの項目はまとめて(=「の」などで区切らずに)指定することができます。
例:平成27年3/31 13:35の100万分前の年の元日午後9時32分24秒の123秒前は
東京オリンピック
2020年7月24日(2020年東京オリンピック開会式の日付)に同じです。
例:東京オリンピックの10日前は

というわけで、面倒な日付計算が必要になったら、今でしょbotに質問してみましょう!(?) たいてい5分以内に答えてくれます。