#日付を表すフォーマットは用途によって多種多様
##日本語で年月日を表記した場合
例えば日本語で「2020年10月8日」って書くと、それだけで半角13文字分(全角を2バイトとすると13bytes)のスペースを食いますよね?それを、西暦・和暦併記で、更に曜日までつけて書くと「2020(令和2)年10月8日(木)」で24bytes(和暦と曜日を囲う括弧を半角とした場合)。
###Excelで西暦と和暦を併記する方法
「セルの書式設定」>「表示形式」で「日付」から「ユーザー定義」に変更します。
セルの書式設定 > 表示形式 > ユーザー定義
種類(T):
yyyy(ggge)"年"m"月"d"日"(aaa)
表示結果:
2020(令和2)年10月8日(木)
ちなみにaを4つ並べて書くと、こうなります。
セルの書式設定 > 表示形式 > ユーザー定義
種類(T):
yyyy(ggge)"年"m"月"d"日"(aaaa)
表示結果:
2020(令和2)年10月8日(木曜日)
これを今日じゃなくて、別の日にしてみましょう。例えば、今よりもっと桁数の多かった、平成2桁時代。2018年12月31日だったらどうなるか?
セルの書式設定 > 表示形式 > ユーザー定義
種類(T):
yyyy(ggge)"年"m"月"d"日"(aaaa)
表示結果:
2018(平成30)年12月31日(月曜日)
全角を2bytesとすると、30bytes。もし括弧が全角だったら、34bytesも食うんですね!
##よく使われている表記法
最もよく使われている日付表記は、「yyyy/mm/dd」方式だろう。これなら、最長でも10bytesで済む!
###それでも、用途によっては、やっぱり長く感じる
でも、Excelなんかで何枚もシートが連なってるようなケースでは、シート名は長いと鬱陶しいので、「20201031」のようにyyyymmdd形式で8文字で書く人は結構多いと思います。
###西暦の下2桁から書いてみる
場合によっては、西暦下2桁から書いて「201031」みたいにする。でもこれって、去年までは「191031」みたいに書いたら「2019年の上2桁を省略したんだな」って瞬時に気づくけど、例えば、2020年10月11日を西暦下2桁からの6桁表記で書くと「201011」。書いた本人はyymmddのつもりでも、読み手が「yyyymm」だと勘違いして、「2010年11月」と解釈してしまう可能性もあり、なんだか厄介。
##だったら、もっと短くしてみよう!
###まずは、月を1桁で表してみよう
皆さんは、普段、何を使って通勤していますか?昨今のコロナ禍により、在宅勤務されているかたもいらっしゃるかもしれませんが、通勤している方は、鉄道やバスなどの公共交通機関を利用していると思います。通勤定期券は、首都圏ならSuicaやPASMO、京阪神エリアならICOCAやPiTaPaのような交通系ICカードと一体化したものを利用している方が多いかと思います。
###ちょっと昔ならどうしてた?
それでは、首都圏の皆さんに質問です。現在のように交通系ICカードが主流となる前の時代には、どんなものがあったか覚えていますか?
私鉄各社共通で使えた「パスネット」を利用していた方、裏面には何が書かれていましたか?
日付や利用区間、残高が印字されていましたね(ご存じない方は、SuicaやPASMOの履歴印字をイメージしてみてください)。実はパスネットの日付欄は、3桁分しか確保されていなかったのです。
10月、11月、12月にはそれぞれ英字のX、Y、Zが割り当てられていました。これは、16進法でいうA、B、Cと同じですね?!例えば、12月31日なら、「Z31」と印字されていたのです。
京阪神エリアで利用できた「スルッとKANSAI」は4桁表記(現在のSuicaやPASMOの履歴印字と同じ)だったので、関西の方は、こんなところに16進法が応用されていたなんて、イメージが湧きづらいかもしれませんね。。。
10月以降は16進法で表記する
1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 5 6 7 8 9 A B C
##月はわかったけど、日は16進法じゃ解決できないよ!
日は最大で31日まであるので、当然ながら、16進法では1桁で表記できません。
ここで、最大が「31」であることに注目してみましょう!!
31=32-1=2^5-1
###ポケモンの個体値に使われている「32進法」で解決!
皆さんの中には、「6Vポケモン」をつくるのに苦労された方も多いかと思います。
このアルファベットの「V」って何だ?と思った方、16進法では英字はA,B,C,D,E,Fの6種類でしたね?つまり、16進法では、1文字で表現できる最大の数はF、すなわち15なのです。
もし、「G」以降の文字も使ってもよい、と言われたら、
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
G H I J K L M N O P Q R S T U V
と書き表すことができます。
「32進法」は0~31までを、数字の0~9と、アルファベットのA~Vの文字を用いて表現できるのです。
最大値「31」をアルファベットで表すと「V」の文字が使われるので、
- HP
- こうげき
- とくこう
- ぼうぎょ
- とくぼう
- すばやさ
の6つの要素全てが「V」であるポケモンのことを「6Vポケモン」というのです。
ポケモンをやっていない人には「32進法」はあまり馴染みがないかもしれませんが、これを応用して、月を16進法、日を32進法で書けますね?
##月末を2文字で書いてみよう
ポケモンやってた人は、「V」の次に大きい値は「U」、とすぐに出てくるでしょう。
「大の月」はVまで、「小の月」はUまで使います。2月はSまたはTまで使います。
- 1月31日→1V
- 2月28日→2S、閏年の2月29日→2T
- 3月31日→3V
- 4月30日→4U。なんか英語の"For You"みたいですね!
- 5月31日→5V
- 6月30日→6U。6月は「小の月」なので「6V」はありません(笑)
- 7月31日→7V
- 8月31日→8V
- 9月30日→9U
- 10月31日→AV。10月以降は、月も英字になります。(例)10月10日→AA。
- 11月30日→BU
- 12月31日→CV。ちなみに声優さんのCVはCharacter Voiceを略した和製英語。
これで全ての月日が2文字で書けるようになりました。
##年は2000年以降なら下2桁を1文字で表せる
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K
あくまで32進法の応用なので、残念ながら1999年以前は1文字表記できません。
えっ?「L」以降の余った英字を逆から使って、
99 98 97 96 95 94 93 92 91 90 89 88 87 86 85
Z Y X W V U T S R Q P O N M L
とすれば1985年まで遡れるじゃないか、って?
その考え方、悪くはないのですが、来年(2021年)になったら「L」も使うので、1986年までしか遡れなくなってしまい、1985年は「遡れる年」から外されてしまいます。そして2022年(M)には1986年が、更にその翌年の2023年(N)には1987年が「遡れるリスト」から外れてしまい・・・
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
L M N O P Q R S T U V W X Y Z
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
上記のように、毎年「遡れなくなる年」が1つずつ増えていきます。
2035年に「Z」まで使うので、1999年も「遡れる年」から外され、完全に2000年以降しか表記できなくなります。
##この方法は2035年までしか使えない
もう、お気づきかと思いますが、この方法は2035年までしか使うことができません。
2036年になったら、使えなくなってしまうので、予めご了承ください。
今日が2020年10月8日なので、3文字表記すると、
- 2020年10月8日→「KA8」
となります。西暦下2桁から6桁表記で「201008」と書くよりスリムになったかと思います。
- 2020年10月9日→「KA9」
- 2020年10月10日→「KAA」
- 2020年10月11日→「KAB」
- 2020年10月12日→「KAC」某ゲーム会社の大会みたいですね(笑)
- 2020年10月13日→「KAD」
- 2020年10月14日→「KAE」
- 2020年10月15日→「KAF」
- 2020年10月16日→「KAG」ここで「日」に16進法にはない「G」を使います。
このように、年と日は32進法、月は16進法を使うので、
- 年→「K」まで(2020年現在。使おうと思えば「36進法」で2035年の「Z」まで表現可能)
- 月→「C」まで
- 日→「V」まで(大の月)
の英字を使うことになります。
###やっぱり3文字全てが英字になるとややこしいと感じる方へ
どうしてもこの時期(10-12月)は10日以降月末まで3文字全てが英字となり、ややこしいと感じる方は、「日」だけ数字2桁を用いて4桁表記とし、
*「2020年12月31日」→KC31
などとしてみてはいかがでしょうか。
###雑記:ファミコン時代のスーパーマリオの残機表示
今年35周年を迎えた国民的ゲーム「スーパーマリオブラザーズ」の残機表示、1985年当時は1桁しか想定されていなかったようで、マリオの残機が10人以上になると、残機表示の前に「王冠のマーク」が現れ、1upキノコなどで残機が増える毎に、
- 10人→王冠0
- 11人→王冠1
- 19人→王冠9
- 20人→王冠A
となり、以下「36進法」に基づいて、
- 41人→王冠V(ポケモンの「V」が31なので、+10して41が「王冠V」です)
- 42人→王冠W
- 43人→王冠X
- 44人→王冠Y
- 45人→王冠Z
- 46人以上→王冠マークの右の表示がバグる
とだんだん表示がおかしくなっていき、符号つき8bitの限界を超えるとゲームオーバーとなります。
「3-1」などのゴール手前の階段でカメキックして無限増殖をやり過ぎてゲームオーバーになった人も多いのではないでしょうか。私もその一人ですが(笑)