「『12:30 am』は何時か」について語ってみる
2011年2月6日 日常 コメント (2) 「『12:00:00 AM』って何時?」(http://10395.diarynote.jp/200712202104520000/)がトラップになって
「12:30 am 何時」で検索してきた人がいた。で、リンク元の検索をたどって驚いた。
「12:30 am は24時制の1230(昼間)である」という説明が上位に来ている。・・・そりゃまずいだろう。
その説明を鵜呑みにして勘違いしてトラぶったら大変だ。
つうわけで上記の検索が比較的上位にきている縁で説明を書いてみる。
ここでは敢えて「正しい」とは記述しない。
「正しい」のが別だとしても普通の解釈は上記の通りだから。
まず、
「午前 12:00」については法律等から「昼」と考えられる。
http://jjy.nict.go.jp/QandA/12am-or-0pm-J.html
http://www.nao.ac.jp/QA/faq/a0401.html
しかしながら、これはあくまで日本の「午前/午後」についてのものであり、
日本が「午前/午後」を導入するより前から存在していた「am/pm」に対してまで規定することはしていないし、規定はできない。
(たとえ、URLに am pm が含まれていてもw)
デジタル時計で「am/pm」の表示はあっても「午前/午後」の表示が少ないのはこの違いのためだろう。
さて「12:30 am」が表す時刻を解釈していく。
である。これに対して後付で数字による表現をつけ、
デジタル時計も面倒だがこれに合うようにわざわざしているのである。
したがって、
となる。
「12:00 am」は同じような解釈ができないが
「『12:01 am』『12:00:01 am』は真夜中なので『12:00 am』も真夜中」ぐらいの解釈だと思われる。
(実は「12:30 am」ほど揺らぎの無いの解釈ではないようである。
(Wikipedia:参照
midnight http://en.wikipedia.org/wiki/Midnight
12-hour clock http://en.wikipedia.org/wiki/12-hour_clock)
僕の説明は(世界的な)標準的な解釈に対する「勝手な説明」にすぎない。
何も知らない人が「(世界的な)標準とは違う解釈の説明」を信じて
不幸なことにならないようには希望する。
--
平成23年2月6日 20時25分
デジタル時計での「12:00 am」の勝手説明の記述を削除し、
代わりに English の WIkipedia の mignight へのリンクを追加した。
--
平成23年2月18日
『12:00:01 am』を追記
--
平成24年2月16日
リンク等修正
文言変更等
「12:30 am 何時」で検索してきた人がいた。で、リンク元の検索をたどって驚いた。
「12:30 am は24時制の1230(昼間)である」という説明が上位に来ている。・・・そりゃまずいだろう。
その説明を鵜呑みにして勘違いしてトラぶったら大変だ。
つうわけで上記の検索が比較的上位にきている縁で説明を書いてみる。
世界の標準的な解釈では
「12:00 am」は 24時制の 0000(夜中)の時刻を表す
「12:30 am」は 24時制の 0030(夜中)の時刻を表す
ここでは敢えて「正しい」とは記述しない。
「正しい」のが別だとしても普通の解釈は上記の通りだから。
まず、
「午前 12:00」と「12:00 am」は異なるものである。
したがって 「am/pm」と「午前/午後」も異なるものである。
「午前 12:00」については法律等から「昼」と考えられる。
http://jjy.nict.go.jp/QandA/12am-or-0pm-J.html
http://www.nao.ac.jp/QA/faq/a0401.html
しかしながら、これはあくまで日本の「午前/午後」についてのものであり、
日本が「午前/午後」を導入するより前から存在していた「am/pm」に対してまで規定することはしていないし、規定はできない。
(たとえ、URLに am pm が含まれていてもw)
デジタル時計で「am/pm」の表示はあっても「午前/午後」の表示が少ないのはこの違いのためだろう。
さて「12:30 am」が表す時刻を解釈していく。
0 なんて時刻はアナログ時計にはない
アナログ時計に基づくと
1から 2の前まで = 1時からxx分すぎ、あるいは1時丁度
2から 3の前まで = 2時からxx分すぎ、あるいは2時丁度
・・・
11から 12の前まで = 11時からxx分すぎ、あるいは11時丁度
そして
12から 1の前まで = 12時からxx分すぎ、あるいは12時丁度
である。
である。これに対して後付で数字による表現をつけ、
デジタル時計も面倒だがこれに合うようにわざわざしているのである。
したがって、
「12:30」は 12 と 1 の間の時刻を指す。
am は24時制 00:00 と 12:00 の間(両端の話はとりあえず置いておいて)である。
したがって、「12:30 am」は24時制の 0030 を指す。
となる。
「12:00 am」は同じような解釈ができないが
「『12:01 am』『12:00:01 am』は真夜中なので『12:00 am』も真夜中」ぐらいの解釈だと思われる。
(実は「12:30 am」ほど揺らぎの無いの解釈ではないようである。
(Wikipedia:参照
midnight http://en.wikipedia.org/wiki/Midnight
12-hour clock http://en.wikipedia.org/wiki/12-hour_clock)
僕の説明は(世界的な)標準的な解釈に対する「勝手な説明」にすぎない。
何も知らない人が「(世界的な)標準とは違う解釈の説明」を信じて
不幸なことにならないようには希望する。
--
平成23年2月6日 20時25分
デジタル時計での「12:00 am」の勝手説明の記述を削除し、
代わりに English の WIkipedia の mignight へのリンクを追加した。
--
平成23年2月18日
『12:00:01 am』を追記
--
平成24年2月16日
リンク等修正
文言変更等
Float を主キーにしてはいけません。
2011年2月8日 コンピュータ「今の時代、基本的に、SQL Serverとかで float は使うべきではない。」(http://10395.diarynote.jp/200909072116364066/ )を書いた直後くらいに
「SQLServer Float Primary Key」での検索でアクセスがあった。
トラぶりそうだし面白そうだとおもいつつ、1年半ほど放置していたが、実験してみることにした。
SQL Server 2008 で試しました。
「SQLServer Float Primary Key」での検索でアクセスがあった。
トラぶりそうだし面白そうだとおもいつつ、1年半ほど放置していたが、実験してみることにした。
SQL Server 2008 で試しました。
CREATE TABLE FloatKeyTable(
FloatKey FLOAT CONSTRAINT PK_FloatKeyTable PRIMARY KEY
, Description NVARCHAR(50)
)
コマンドは正常に完了しました。
INSERT INTO FloatKeyTable(
FloatKey
, Description)
VALUES(8,’8’)
(1 行処理されました)
INSERT INTO FloatKeyTable(
FloatKey
, Description)
VALUES(8,’8’)
メッセージ 2627、レベル 14、状態 1、行 1
制約 ’PK_FloatKeyTable’ の PRIMARY KEY 違反。オブジェクト ’dbo.FloatKeyTable’ には重複したキーを挿入できません。
ステートメントは終了されました。
INSERT INTO FloatKeyTable(
FloatKey
, Description)
VALUES(
(CAST(0.1 AS FLOAT) + CAST(0.7 AS FLOAT)) * 10
, ’(CAST(0.1 AS FLOAT) + CAST(0.7 AS FLOAT)) * 10’)
(1 行処理されました)
INSERT INTO FloatKeyTable(
FloatKey
, Description)
VALUES(
(CAST(0.1 AS FLOAT) + CAST(0.7 AS FLOAT)) * 10
, ’(CAST(0.1 AS FLOAT) + CAST(0.7 AS FLOAT)) * 10’)
メッセージ 2627、レベル 14、状態 1、行 1
制約 ’PK_FloatKeyTable’ の PRIMARY KEY 違反。オブジェクト ’dbo.FloatKeyTable’ には重複したキーを挿入できません。
ステートメントは終了されました。
SELECT * FROM FloatKeyTable
FloatKey Description
---------------------- --------------------------------------------------
8 (CAST(0.1 AS FLOAT) + CAST(0.7 AS FLOAT)) * 10
8 8
(2 行処理されました)
SELECT * FROM FloatKeyTable
WHERE
FloatKey = 8
FloatKey Description
---------------------- --------------------------------------------------
8 8
(1 行処理されました)
SELECT * FROM FloatKeyTable
WHERE
FloatKey = (CAST(0.1 AS FLOAT) + CAST(0.7 AS FLOAT)) * 10
FloatKey Description
---------------------- --------------------------------------------------
8 (CAST(0.1 AS FLOAT) + CAST(0.7 AS FLOAT)) * 10
(1 行処理されました)
DELETE FROM FloatKeyTable WHERE FloatKey = 8
(1 行処理されました)
SELECT * FROM FloatKeyTable
FloatKey Description
---------------------- --------------------------------------------------
8 (CAST(0.1 AS FLOAT) + CAST(0.7 AS FLOAT)) * 10
(1 行処理されました)