日付の生成、加算・減算、比較、フォーマットなどの操作は、プログラミングでよくある操作の1つです。
データベースやAPIなどで外部と日付データを送受信する際には、決まったフォーマットにする必要があります。
そのため、プログラミング初心者にとって、日付操作は学習すべき事項の1つとなります。
本ブログでは、JavaScript、Python、Java、Ruby、Goの5つの言語の日付操作について解説してきました。
本記事では、各言語の日付操作についてまとめます。
言語の思想などによる違いも分かり、面白い内容になっていますので、ぜひ最後まで見ていっていただければと思います。
各言語における操作の詳しい説明とソースコードは各記事に記載しています。本記事の最後にリンクを用意しておきますので、気になる方はチェックしてみてください。
プログラミング言語の日付操作まとめ
よくある日付操作として、以下の内容を採り上げます。
- 日付を扱うクラスやパッケージ
- 日時の生成方法
- 日時・曜日の取得方法
- 日時の加算・減算方法
- 日時の差分を取得する方法
- 日時を比較する方法
- 日時から文字列へフォーマットする方法
- 文字列から日時へ変換する方法
- ライブラリの利用
日付を扱うクラスやパッケージ
日付操作で扱う主なクラスやパッケージには以下があります。
言語 | クラス・パッケージ |
---|---|
JavaScript
|
|
Python
|
|
Java
|
|
Ruby
|
|
Go
|
|
JavaScriptとGoについては、基本的には1択で、Dateオブジェクト、timeパッケージを利用します。
Pythonは関連するクラスはいくつかありますが、基本的にはdatetimeを使い、必要に応じて他を利用します。
JavaとRubyは同様のことができるクラスがいくつか用意されていますが、特別な理由がなければ、JavaはLocalDateTimeクラス、RubyはTimeクラスを使うのが良いでしょう。
日時の生成方法
言語 | 日時の生成方法 |
---|---|
JavaScript
|
|
Python
|
|
Java
|
|
Ruby
|
|
Go
|
|
JavaScriptはDateオブジェクトをnewして日時情報を生成します。この際に引数に日時情報を指定することで、任意の日時で生成することができますが、月の情報は作成したい月に-1する点に注意が必要です。
他の言語では、作成したい月をそのまま指定することで作成できます。
PythonやJavaは、日付だけを扱うクラス、時刻だけを扱うクラスが用意されているので、その2つから日時を生成することも出来るようになっています。
日時・曜日の取得方法
言語 | 日時・曜日の取得方法 |
---|---|
JavaScript
|
|
Python
|
|
Java
|
|
Ruby
|
|
Go
|
|
各言語ともに、年や月などの各属性値を取得するための方法が提供されています。
JavaScriptだけは、月の値を実際月-1で返すので注意が必要です。
曜日で取得できる数値は、返す値の範囲と数値の意味が言語によってバラバラのため、実装時には注意が必要です。
日時の加算・減算方法
言語 | 日時の加算・減算方法 |
---|---|
JavaScript
|
|
Python
|
|
Java
|
|
Ruby
|
|
Go
|
|
Python、Ruby、Goは差分を表すオブジェクトやインスタンスを作成し、日時に対して加減算を行います。
JavaScript、Javaは日時の各属性値に対して、直接加減算を行います。
日時の差分を取得する方法
言語 | 日時の差分を取得する方法 |
---|---|
JavaScript
|
|
Python
|
|
Java
|
|
Ruby
|
|
Go
|
|
どの言語も日時情報同士をメソッドなどを使い、差分を取得します。
差分を表す単位はクラスであったり、秒であったり、ナノ秒であったりと言語によりバラバラです。
日時を比較する方法
言語 | 日時を比較する方法 |
---|---|
JavaScript
|
|
Python
|
|
Java
|
|
Ruby
|
|
Go
|
|
JavaScriptは数値に変換してから比較、PythonとRubyはクラス同士を直接比較、JavaとGoは専用の操作で比較と言語により方法が異なります。
日時から文字列へフォーマットする方法
言語 | 日時から文字列へフォーマットする方法 |
---|---|
JavaScript
|
|
Python
|
|
Java
|
|
Ruby
|
|
Go
|
|
JavaScriptは、書式指定によるフォーマットが提供されておらず、若干手間がかかります。
JavaScript以外は、書式指定により好きなフォーマットに変換することが可能です。
文字列から日時へ変換する方法
言語 | 文字列から日時へ変換する方法 |
---|---|
JavaScript
|
|
Python
|
|
Java
|
|
Ruby
|
|
Go
|
|
JavaScriptは、書式を指定できないためブラウザなどの環境により変換可否が変わる可能性があるため注意が必要です。
JavaScript以外は、書式を指定することで、自由な形式の文字列でも日時に変換することができます。
ライブラリの利用
言語 | よく使われるライブラリ |
---|---|
JavaScript
|
|
Python
|
|
Java
|
|
Ruby
|
|
Go
|
特になし
|
Javaについては、LocalDateTimeを使用していれば大抵の操作は出来るため、あえてライブラリを使うことはないかもしれません。
Goについては、これと言ったライブラリはまだありませんが、今後出てくる可能性はあります。
日付操作には十分なテストが必要
日付と文字列を変換していると、環境によって時間が変わってしまうことがあります。
また、クライアントとサーバで日時をやり取りすると時間がが変わってしまうなどもあります。
こうした環境による時間の変化は、タイムゾーンが原因であることが考えられます。
実際のプロジェクトでは、データベースはどのタイムゾーンなのか、サーバはどのタイムゾーンで設定するのか、クライアントはどのタイムゾーンで表示するのかといったことを最初に決めておく必要があります。
これらを統一しておかないと、意図せず異なった日時で保存されてしまったり、間違った時間を元に処理が動いてしまったりといったことが発生します。
また、うるう年やうるう秒など、特定の時にだけ発生する時間差などもあります。
過去にもこうした対策がきちんと行われていないことが原因で、大きなトラブルになった事例もあります。
日付を扱う際には、実装時にも注意し、テストを十分に行うことをおすすめします。
今回はプログラミング言語の日付操作についてまとめました。
参考になれば幸いです。
関連記事
各言語のソースコードと詳しい解説は下記の記事をご覧ください。
コメント