時間API
各種OSやライブラリで独自実装が大量に存在する。独自実装を使うと当然依存性問題となる。
極力、標準的な関数を使うことを推奨する。(あるいは、ラッパーで隠蔽する。)
ここでは検索の手がかりとしての名前だけを提示する。
C言語(C++ でもAPIは継承)
table:cfunc
time_t 時間型(ほとんどの実装で精度が秒)
struct timeval 時間型(マイクロ秒) SVr4, 4.3BSD
struct timespec 時間型(ナノ秒) SUSv2, POSIX.1-2001, C11
time() time_t 型の現在時刻の取得 SVr4, 4.3BSD, C89, C99, POSIX.1-2001
clock_gettime() struct timespec 型の現在時刻の取得 SUSv2, POSIX.1-2001
clock_settime() struct timespec 型の現在時刻の設定 SUSv2, POSIX.1-2001
clock_getres() SUSv2, POSIX.1-2001
gettimeofday() struct timeval 型の現在時刻の取得 SVr4, 4.3BSD, POSIX.1-2001 (POSIX.1-2008で廃止予定と記載)
settimeofday() struct timeval 型の現在時刻の設定 SVr4, 4.3BSD
difftime() time_t の差を求める。double (秒)を返す。
localtime() time_t からローカル時刻の struct tm を求める。
localtime_s() time_t からローカル時刻の struct tm を求める。スレッドセーフ、境界チェック C11
localtime_r() time_t からローカル時刻の struct tm を求める。スレッドセーフ C2x
gmtime() time_t からUTC時刻の struct tm を求める。
mktime() ローカル時刻の struct tm から time_t を求める。
timegm() UTC時刻の struct tm から time_t を求める。 GNU
asctime() struct tm から文字列表現に変換。
ctime() time_t からローカル時刻の文字列表現に変換。
strftime() 書式文字列で出力する。
strptime() SUSv2, POSIX.1-2001
→検索は/rtfm/POSIXへ。Linux の場合は https://linuxjm.osdn.jp/
timegm は GNU 独自実装になっている。→ timegm
JavaScript
Date
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date
moment.js がよく使われるが、その他の実装方法との比較で代替手段を解説している。
https://github.com/you-dont-need/You-Dont-Need-Momentjs
以下が候補になる。
date-fns
Day.js
luxon
https://npmtrends.com/date-fns-vs-dayjs-vs-luxon-vs-moment
Java
Java 8 からはまともな Date and Time API が用意されている。
https://docs.oracle.com/javase/jp/8/docs/api/java/time/package-summary.html
古くは Date と GregorianCalendar を使っていた。(現在は非推奨)
https://docs.oracle.com/javase/jp/8/docs/api/java/util/Date.html
https://docs.oracle.com/javase/jp/8/docs/api/java/util/GregorianCalendar.html
.NET
日付、時刻、およびタイム ゾーン https://docs.microsoft.com/ja-jp/dotnet/standard/datetime/
PostgreSQL
8.5. 日付/時刻データ型 https://www.postgresql.jp/document/13/html/datatype-datetime.html
9.9. 日付/時刻関数と演算子 https://www.postgresql.jp/document/13/html/functions-datetime.html
#時間