日本でよく使われる日付範囲テキストを標準化したい
命名:ご都合記法
モチベーション
下記の日程でいかがでしょうか?
11月13日(水)12:00〜14:30
こういうフォーマットを、ツールなどでインポート・エクスポートしたい
例えばメーラのプラグインやら、ガントチャートなど
ツールからも人間からもリーダブルなものを使いたい
下記のようなやつはつらい
下記の日程いかがでしょうか?
Sun Nov 17 2019 16:00:00 GMT+0900 (日本標準時)
人間がいままで使ってきた書き方にツールを寄せたい
多少厳密さは捨てざるを得ない
パース可能なフォーマット
点を表すもの(gotugo-point)
11月13日
2019/11/13 00:00を表す
複数の点を表すもの
11月13日 11:00 12:00 14:00
範囲を表すもの(gotugo-range)
11月13日
丸一日の範囲を表す
2019/11/13 00:00 ~ 11/14 00:00の24時間を表す
11月
丸一ヶ月の範囲を表す
2019/11/01 00:00 ~ 11/30 00:00
11月13日 11:30~16日 7:30
基本的な範囲フォーマット
2019/11/13 11:30 ~ 2019/11/16 07:30
複数の範囲を表すもの
11月13日 11:00~12:00 14:00~16:00
11月13日 11~12時 14~16時
略記法(gotugo-point-short)
11/13
書かれていない情報はどう考えるか?
時間省略
00:00:00を補う
またいだ月の省略を許可するか?
11月30日~1日とは普通書かない… 許可しない
11月30日~12月01日と書くこと
年の省略を許可するか?
下記のように来年の日付をリストアップするのはありがち
12月30日
12月31日
1月1日
省略された部分に今年を補ってしまうと、1/1は今年の始めと解釈されてしまう(が、この文脈だと来年初めと理解するのが正しい)
どこまでがコンテキストかを考えて、日付が遡らないように推測する
例えば12/31~1/1だと、終了日が開始日より前にはならないことを考慮し、来年の1/1と解釈する
日付が列挙されている場合も同様
日付が列挙されているコンテキストをパーサが知らなくてはいけない
シリアライズフォーマット
基本的にパース可能なフォーマットよりは厳密にする
省略可能なものは範囲指定と日付列挙の年のみ
出力例
11月13日(水)12:00〜14:30
11月13日(水)~ 11月14日(木)
メールやチャットなどコミュニケーションツールでは、短さ優先で省略すると思われるのでデフォルト省略
書類など、年の明示が重要なケースがあるので、オプションで付加可能とする
表記ゆれをどうするか?
カッコ
(火)と(水)どちらがよいか?
曜日のフォントとの整合性を考えると、全角に統一するときれい
パーサはどちらもvalidとしたほうがいい
というか曜日はパースしないで良さそう(重複した情報なので)
エラーチェックしてあげるのはいいかも
例
厳密なものはISO 8601がある
yyyy-MM-ddTHH:mm:ss
調整さんデフォルト
11/26(火) 19:00〜
以下の日程でご都合いかがでしょうかメーカー
11月13日(水)12:00〜14:30