プログラミングする際に日付の扱いがスラッシュ区切りだとちょいちょい面倒になることはエンジニアのみなさまには周知の事実かと思われますが、いつまで経っても
な く な ら な い
そんなわけで日付スラッシュ区切り撲滅委員会の立ち上げをここに宣言したいと思います。
なお、ここで問題にしているのは、UIや外部サービスの等のなんらかのシステム境界線上において発生する、文字列で定義された日付フォーマットのことです。
プログラム内部で日付を扱う場合は、区切り文字云々が問題になる文字列ではなく何らかの日付オブジェクトでやるべきでは? と言われましたらそれはまったくその通りです。
設立の主旨
スラッシュでなければなにで区切ればいいのか?
ハイフンです。
YYYY/MM/DD
ではなく YYYY-MM-DD
って書きましょう。
なぜスラッシュ区切りではいけないのか?
日本語で「●/●/●」と区切られて日付が表示されている場合、暗黙的に「年/月/日」を意味します。これはコンピュータシステム用途として定義されたものではなく、手書きの文化から引き継いだものと思われます。
しかし、英語でスラッシュ区切りで日付を記入する場合、暗黙的に「月/日/年」を意味します。
なお、同じ英語圏でもイギリスだと「日/月/年」になるそうです。(さっき知った)
参考:
https://mysuki.jp/english-date-1468
つまり、西暦2020年10月6日と意図して「2020/10/06」と示したとき
アメリカ英語式では西暦6年(※)2020月10日を意味し
イギリス英語式では西暦6年(※)10月2020日を意味するわけです
※または20部分を省略したとみなし、2006年
バグる気しかしないですね
それに伴う二次的な理由
おそらくは上記の理由により、大抵のプログラミングライブラリで日付を扱う場合、ハイフン区切りのYYYY-MM-DDを使用します。
スラッシュ区切りにも一見対応している場合がありますが、解釈フォーマットが上記で言う日本式なのかアメリカ英語式なのかイギリス英語式なのかは判然としません。(なおライブラリの開発者のボリュームゾーンを考えると、大抵の場合アメリカ英語式と推測されます)
利用側からフォーマットを指定してあげるインターフェースがあればスラッシュでもパトラッシュでも(ここジョーク!)正しく解釈させられるでしょうが、フォーマットの指定方法がない、または不完全なため使えない・使いづらい・わざわざデフォルトでない方法で扱うほどの話ではない、などの様々な事情により、プログラムを書いていればいずれどこかではハイフン区切りの日付形式にお世話になることになります。
つまり、スラッシュ区切り日付を使用している箇所があると、状況によりどこかで日付フォーマットをハイフン区切りに変換する必要が出てきます。ハイフン区切りを使う箇所とスラッシュ区切りを使う箇所とでフォーマットをうまく切り替えて扱う、という気遣いが必要になるわけです。
バグる気しかしないですね
スラッシュ区切り撲滅に向けた委員会活動
ユーザインターフェース
スラッシュ区切りはそもそも日付手書きの文化から引き継いだものであろう、と先に申し上げました。
そんなわけで大抵のユーザさんはスラッシュ区切りに見慣れています。
過激派向け
それでも全部ハイフン区切りにします。入力も表示もなんなら手書きも全部ハイフンでやれ!!!
穏健派向け
表示や入力インターフェースに、ユーザの要望や歴史的経緯上スラッシュ区切りがあるのはいったんやむなしとします。いまは臥薪嘗胆の時と思い耐えましょう。
来るべき時(いつのなんであるかは不明)のために、内部的な値の持ち方でスラッシュを使うのはやめ、出来る限りハイフンで統一しましょう。
なおUI的にも、ここで言うスラッシュ区切りはYYYY/MM/DDを意味しているのである
ということを、プレースホルダーなどを利用してさりげなく宣言しましょう。 スラッシュ区切りの日付というのがYYYY/MM/DDを意味している、というのは、あくまで日本の慣例の中で通じる暗黙知にすぎない
ことを理解しましょう。
スラッシュ区切りの日付がなおユーザにはYYYY、MM、DDだけを入力させて、自動で YYYY年MM月DD日
なんて出し、親切丁寧なインターフェースに見せかけてさりげなくスラッシュをリストラするのも素敵ですね。
ユーザインターフェース以外
過激派向け
全部ハイフン区切りにします。
穏健派向け
新規でクローズドなやつは全部ハイフン区切りにします。
既存ですでにスラッシュ区切りにされている場合は、まあその、可能かつ有用な範囲でハイフン区切りにしましょう。
ハイフン区切りを推進しすぎてバグの温床みたいなものを生み出すのもよくないですよね
自分で管理していないシステムに起因してスラッシュ区切りが避けられない場合(例:使いたいサービスが提供しているAPIのI/Fがスラッシュ区切り日付である、など)は、血の涙を流しながらIF定義箇所でハイフン区切りをスラッシュ区切りに変換するコードを書くのがよいと思います。
意見が言える立場なら「日付はハイフン区切りのほうがいいかも…?」と提案してみるなどもありですね。
異論は認める
以上、ここ最近どうしても気になっているので思いつくまま書き散らかしてみましたが、ご指摘等ありましたらいただけますと幸いです。
余談
なお個人的には、仕事では現状に合わせて素知らぬ顔でスラッシュ区切りにすることもあるも、プライベートでは明らかな日本語書類の手書きの年月日ですら、自由フォーマットの場合は必ずハイフン区切りで書く、隠れ過激派です。
スラッシュ区切りで書こうとすると心のどこかが拒否反応を起こします。
横に YYYY/MM/DD形式で
って注意書きがあればそれに従って書くんですが、そんなものがある紙の書類は見たことない。
(といってもそんな注意書きがあった場合は、今度はYYYY、MM、DDという表示についての暗黙知が求められちゃったりするわけですけども)
同士求む。