書こうと思ったきっかけ
前にも書きましたが、自転車のレース運営をお手伝いしてるんですよ。
でね、タイムトライアルって種目があって、一人ずつ走ってタイムを競うんです。そう、走行時間を計測しなきゃいけないんですね。
で、最近、Google Apps Scriptで計算するようにしたんですが、まぁ時間関係に手間取りました。
そんな時にPythonでも時間を扱う事例が発生したのでまとめて書いとけや!と思ったわけです。
つまり、「共通点があるならまとめてやった方が効率的じゃん」です。
あ、そうそう、前提がひとつ。ここではjavascriptでもpythonでもexcelでも日付、時間を扱う型をdatetime型と呼んでます。
正式には違うのかもしれないけれど、面倒なんでご容赦を。
ISO8601 (日付と時刻の表記に関するISO)
ま、今日まで知らなかったですよ。本当に。
基礎の「き」は真面目にやっていた方がいい。
基本形式と拡張形式
とはいえ、皆さんも忙しいでしょうし、僕なりに気になったところをピックアップしとくね。
特に拡張形式だけでも覚えちゃおう
YYYY-MM-DDThh:mm:ss+09:00
とかYYYY-MM-DDThh:mm:ssZ
Zをつける時はUTC(協定世界時;Universal time corrdinated)です。
T
で区切って、左には年月日を-
で繋ぐ、T
の右は時間分秒を:
で繋いで、最後にUTCからの時間差を書く。
まずは公式ドキュメントの紹介
Pythonはdatetime
、JavaScriptはDate
オブジェクト。
正直言って、僕もまだまだよくわかっていない。言葉が難解。
- Python
- JavaScript
はい。皆さんしっかり読めば大丈夫(お前はど〜よって言われそう。汗)
ええ、充分にはわかっていません。
datetime型の基本の「き」
これさえわかればあとは何とでもなると思います。
先に紹介したJavaScriptのMDNのページの最初の方をよく読んでみてください。こう書いてあります。
JavaScript の Date オブジェクトは、単一の瞬間の時刻をプラットフォームに依存しない形式で表します。
Date オブジェクトは協定世界時 (UTC) の 1970 年 1 月 1 日からの経過ミリ秒数を表す Number の値を含んでいます。
はい、今日の大事なところはここまでです。
え?
っと思われるかもしれませんが、これさえ知っておけばあとは応用でどうにかなります。
「今」の日付を確認してみる
- Python
now = datetime.datetime.now()
print(now)
print(now.timestamp())
2024-04-26 22:31:25.627429
1714138285.627429
- JavaScript
let now = new Date();
console.log(now);
console.log(now.getTime());
Fri Apr 26 2024 22:37:36 GMT+0900 (日本標準時)
1714138656650
で、気づくとこありません???
そう、timestamp()
とか、getTime()
とかの出力です。
流石に同時に出力は無理でしたが、数字を並べてみましょう。
1714138285.627429 (Python)
1714138656650 (JavaScript)
あれ、大半の桁が同じ・・・。
そう、上でMDNの文章を引用しましたが、いずれも1970年1月1日の0時0分0秒を基準にしてるんですね。
ただし、Pythonは単位が秒、JavaScriptはミリ秒ってところに気をつけてください。pythonは小数点以下が6桁あるのでマイクロ秒まで計算してるんですね。
ちょっと道を逸れてExcel
ちなみにエクセルはどうなっているかというと1900年1月1日が1
で、日付が増えるごとに1増えるとか。
Python、JavaScript、Excelまじバラバラやん。w
文字列として2024年4月26日
その右側のセルに=DATEVALUE(ひとつ左のセル)
出力は45408
ちなみに小数点があると時間を表現できるんだと。1/24が1時間分で、1/(24*60)が1分ぶん。
ここまで三つの言語ともにバラバラ。ああ、めんどい。まじめんどい。
大事なこと
大事なことはdatetimeってのは言語によって設定が違うし、バラバラだし、
でも、どっかに基準の日時があって、数える単位も違うんだけど、時間が経つとカウントアップしていく
そんな感じのことを理解しおけばいいってことよね?(PythonとJavaScriptとExcelだけで偉そうなこと言ってる。w)
と言うことで・・・
今日は酔ってしまったので、具体的な使い方はその2以降で紹介できれば(私が復習できれば)と思っています。
楽しかった日はお酒が美味しいので酔ってしまうのは仕方がない・・・うん、仕方がない。