日時の相互変換 (interconversion table)

UNIX 時間と可読文字列や各言語固有の時間クラス等の相互変換。

現在の日時を取得する

名称 説明 値の例(2000-1-1 0:0:0 GMT)
UNIX(エポック)時間 1970-1-1 0:0:0 からの経過秒数(閏秒は無視)。 946684800

Awk

インデックス

変換 先↓ 元→ UNIX 時間(s) 可読文字列
UNIX 時間(s) ソースコード
可読文字列 ソースコード

可読文字列 → UNIX 時間(s)

mktime("1970 01 01 09 00 01")
# local time

UNIX 時間(s) → 可読文字列

strftime("%Y-%m-%d %T", 946684800)
# local time

メニューに戻る

C言語

C 固有型

time_t // time.h UNIX 時間(s)
struct tm // time.h メンバに年、月、日、時、分、秒などの値を持つ構造体。

インデックス

変換 先↓ 元→ time_t = UNIX 時間(s) struct tm 可読文字列
time_t
= UNIX 時間(s)
ソースコード
struct tm ソースコード ソースコード
可読文字列 ソースコード ソースコード

struct tm → time_t = UNIX 時間(s)

#include <time.h>
...
struct tm tm = {
	0, 0, 0, // 秒, 分, 時 (0〜)
	1,       // 日 (1〜31)
	0,       // 月 (0〜11)
	100,     // 年 (1900 年からの年数)
};

// Local time
time_t time = mktime(&tm);

time_t = UNIX 時間(s) → struct tm

地方時にする例、GMT にする例、それぞれリエントラントなものとそうでないもの。

#include <time.h>
...
time_t time = 946684800;

// Local time
struct tm *ptml;
ptml = localtime(&time);

// Local time, Reentrant
struct tm tml;
localtime_r(&time, &tml);

// GMT
struct tm *ptmg;
ptmg = gmtime(&time);

// GMT, Reentrant
struct tm tmg;
gmtime_r(&time, &tmg);

可読文字列 → struct tm

#define _XOPEN_SOURCE
#include <time.h>
...
struct tm tm;
strptime("2000-1-1 0:0:0", "%Y-%m-%d %H:%M:%S", &tm);

time_t = UNIX 時間(s) → 可読文字列

地方時にする例、GMT にする例、それぞれリエントラントなものとそうでないもの。

#include <time.h>
...
time_t time = 946684800;

// Local time
char *lstr = ctime(&time);

// Local time, Reentrant
char lstrr[26];
ctime_r(&time, lstrr);

// GMT
char *gstr = asctime(gmtime(&time));

// GMT, Reentrant
struct tm tm;
char gstrr[26];
asctime_r(gmtime_r(&time, &tm), gstrr);

struct tm → 可読文字列

リエントラントなものと、そうでないもの。

#include <time.h>
...
// Not Reentrant
char *str = asctime(&tm);

// Reentrant
char strr[26];
asctime_r(&tm, strr);

フォーマットを指定する。

// フォーマット指定
#include <time.h>
...
char buf[20];
strftime(buf, 20, "%Y-%m-%d %H:%M:%S", &tm);

メニューに戻る

Java

Java の UNIX 時間は単位がミリ秒。

Java 固有型

java.util.Date UTC の表現を目的とするクラス。
java.util.Calendar カレンダー。

インデックス

変換 先↓ 元→ UNIX 時間(ms) Date Calendar
UNIX 時間(ms) ソースコード ソースコード
Date ソースコード ソースコード
Calendar ソースコード ソースコード

可読形式でフォーマット出力

Date → UNIX 時間(ms)

long ut = date.getTime();

Calendar → UNIX 時間(ms)

long ut = calendar.getTimeInMillis();

UNIX 時間(ms) → Date

Date date = new Date(946684800000L);

Calendar → Date

Date date = Calendar.getTime();

UNIX 時間(ms) → Calendar

Calendar c = Calendar.getInstance();
// ↑ c はデフォルトでは GregorianCalendar クラス
// 初期値は現在時刻になっている
c.setTimeInMillis(946684800000L)

Date → Calendar

Calendar c = new Calendar().getInstance();
// ↑ c はデフォルトでは GregorianCalendar クラス
// 初期値は現在時刻になっている
c.setTime(date);

フォーマット

Java のフォーマット出力は、少々面倒。

import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
...
Calendar now = Calendar.getInstance();
Date date = now.getTime();
DateFormat format = DateFormat.getDateTimeInstance();
System.out.println(format.format(date));

メニューに戻る

Python

Python 固有型

struct_time C の struct tm に類似。
datetime.datetime 日時クラス。

インデックス

変換 先↓ 元→ UNIX 時間(s) struct_time 可読文字列
UNIX 時間(s) ソースコード
struct_time ソースコード ソースコード
可読文字列 ソースコード ソースコード

struct_time → UNIX 時間(s)

import time

st = (
	# 年月日 \
	2000, 1, 1, \
	# 時分秒 \
	0, 0, 0, \
	# 曜、年通算日、DST \
	0, 1, 0  # 範囲内の値なら何でもよい \
)

# Local time
ut = time.mktime(tm)

UNIX 時間(s) → struct_time

地方時にする例と、GMT にする例。

import time

ut = 946684800

# Local time
tm = time.localtime(ut)

# GMT
tm = time.gmtime(ut)

可読文字列 → struct_time

import time
...
tm = time.strptime("2000-1-1 0:0:0", "%Y-%m-%d %H:%M:%S")

UNIX 時間(s) → 可読文字列

地方時にする例と、GMT にする例。

import time
...
t = 946684800

# Local time
str = time.ctime(t)

# GMT
str = time.asctime(time.gmtime(t))

struct_time → 可読文字列

その1
import time

tm = (
	# 年月日 \
	2000, 1, 1, \
	# 時分秒 \
	0, 0, 0, \
	# 曜、年通算日、DST \
	0, 1, 0  # 範囲内の値なら何でもよい \
)
str = time.asctime(tm)
その2
// フォーマット指定
import time

tm = (
	# 年月日 \
	2000, 1, 1, \
	# 時分秒 \
	0, 0, 0, \
	# 曜、年通算日、DST \
	0, 1, 0  # 範囲内の値なら何でもよい \
)
str = time.strftime("%Y-%m-%d %H:%M:%S", tm)

メニューに戻る

Ruby

Ruby 固有型

Time オブジェクト。 UNIX 時間をオブジェクト化。

インデックス

変換 先↓ 元→ UNIX 時間(s) Time 可読文字列
UNIX 時間(s) ソースコード
Time ソースコード ソースコード
可読文字列 ソースコード ソースコード

Time → UNIX 時間(s)

# time は UTC か地方時かを内部に持っており
# これによって同じ日時であっても値は変わる。
ut = time.to_i

UNIX 時間(s) → Time

ut = 946684800

tm = Time.at(ut)

可読文字列 → Time

地方時にする例と、GMT にする例、それぞれ2例ずつ。

# 文字列から年月日などの数値への変換は自力で。

# Local (2例とも同じ)
tm = Time.local(2000, 1, 1, 0, 0, 0)
tm = Time.mktime(2000, 1, 1, 0, 0, 0)

# GMT = UTC
tm = Time.gm(2000, 1, 1, 0, 0, 0)
tm = Time.utc(2000, 1, 1, 0, 0, 0)

UNIX 時間(s) → 可読文字列

地方時にする例と、GMT にする例、それぞれ2例ずつ。

ut = 946684800

# Local time
str = Time.at(ut).to_s
# Local time (asctime 形式)
str = Time.at(ut).asctime

# GMT (2例とも同じ)
str = Time.at(ut).gmtime.to_s
str = Time.at(ut).utc.to_s

Time → 可読文字列

その1

フォーマットの異なる2例。

str = tm.to_s
str = tm.asctime  # asctime 形式
その2
// フォーマット指定
str = tm.strftime("%Y-%m-%d %H:%M:%S")

メニューに戻る

Shell

インデックス

変換 先↓ 元→ UNIX 時間(s) 可読文字列
UNIX 時間 ソースコード
可読文字列 ソースコード

可読文字列 → UNIX 時間

date +%s -d '2000-1-1 0:0:0'
GMT ならば -u を付加。

UNIX 時間 → 可読文字列

date +'%Y-%m-%d %T' -d '1970-1-1 946684800 sec'

メニューに戻る