Unixタイムスタンプから日付への変換ツール:12/24時間形式のサポート
Unixタイムスタンプを人間が読みやすい日付と時刻に変換します。このシンプルで使いやすい変換ツールを使って、12時間形式と24時間形式のいずれかを選択できます。
Unix タイムスタンプコンバータ
変換された日付と時刻
ドキュメント
Unix タイムスタンプコンバーター
はじめに
Unix タイムスタンプ(POSIX 時間またはエポック時間とも呼ばれます)は、時点を記述するためのシステムです。これは、1970年1月1日(真夜中 UTC/GMT)から経過した秒数です。うるう秒は考慮されません。Unix タイムスタンプは、特定の瞬間をコンパクトで言語に依存しない形式で表現するため、コンピュータシステムやプログラミング言語で広く使用されています。
このコンバーターを使用すると、Unix タイムスタンプを人間が読みやすい日付と時刻の形式に変換できます。12 時間(AM/PM)形式と 24 時間形式の両方をサポートしており、地域や個人の好みに応じた形式を選択できます。
Unix タイムスタンプの仕組み
Unix タイムスタンプは、Unix エポック(1970年1月1日、00:00:00 UTC)からの秒数として計算されます。これにより、時間の差を計算したり、コンパクトな形式で日付を保存したりするのに特に便利です。
Unix タイムスタンプからカレンダー日付への数学的な変換は、いくつかのステップを含みます。
- Unix エポック(1970年1月1日、00:00:00 UTC)から始めます。
- タイムスタンプの秒数を加えます。
- うるう年、月の長さの変動、その他のカレンダーの複雑さを考慮します。
- 必要に応じてタイムゾーンの調整を行います。
例えば、Unix タイムスタンプ 1609459200
は、2021年1月1日金曜日、00:00:00 UTC を表します。
変換の公式は次のように表現できます。
ほとんどのプログラミング言語やオペレーティングシステムは、この変換を処理するための組み込み関数を提供しており、複雑なカレンダー計算を抽象化しています。
時間形式のオプション
このコンバーターは、2つの時間形式オプションを提供します。
-
24 時間形式(「軍事時間」とも呼ばれます):時間は 0 から 23 の範囲で、AM/PM の指定はありません。例えば、午後 3 時は 15:00 と表されます。
-
12 時間形式:時間は 1 から 12 の範囲で、午前中は AM(ante meridiem)、午後は PM(post meridiem)で表されます。例えば、24 時間形式の 15:00 は午後 3 時として表されます。
これらの形式の選択は、主に地域の慣習や個人の好みに依存します。
- 24 時間形式は、ほとんどのヨーロッパ、ラテンアメリカ、アジア、ならびに科学、軍事、医療の文脈で世界中で一般的に使用されています。
- 12 時間形式は、アメリカ、カナダ、オーストラリア、その他の英語圏の国々で日常的に使用されています。
エッジケースと制限
Unix タイムスタンプを扱う際には、いくつかのエッジケースや制限に注意することが重要です。
-
負のタイムスタンプ:これらは Unix エポック(1970年1月1日)以前の日付を表します。数学的には有効ですが、一部のシステムでは負のタイムスタンプを正しく処理できない場合があります。
-
2038年問題:Unix タイムスタンプは、しばしば 32 ビット符号付き整数として保存され、2038年1月19日にオーバーフローします。この時点以降、32 ビットシステムは正しく時間を表現できなくなります。
-
非常に大きなタイムスタンプ:非常に遠い未来の日付は、一部のシステムでは表現できない場合があるか、または一貫性のない方法で処理されることがあります。
-
うるう秒:Unix 時間は、地球の不規則な回転を補うために UTC に追加されることがあるうるう秒を考慮していません。これにより、Unix 時間は天文時間と正確に同期していません。
-
タイムゾーンの考慮:Unix タイムスタンプは、UTC の瞬間を表します。ローカル時間に変換するには、追加のタイムゾーン情報が必要です。
-
夏時間:タイムスタンプをローカル時間に変換する際には、夏時間の移行の複雑さを考慮する必要があります。
使用例
Unix タイムスタンプは、コンピュータおよびデータ管理のさまざまなアプリケーションで使用されています。
-
データベースレコード:タイムスタンプは、エントリが作成または変更された日時を記録するために一般的に使用されます。
-
ウェブ開発:HTTP ヘッダー、クッキー、キャッシングメカニズムは、しばしば Unix タイムスタンプを使用します。
-
ログファイル:システムログは、通常、イベントを正確に時系列で記録するために Unix タイムスタンプを使用します。
-
バージョン管理システム:Git やその他の VCS は、コミットが行われた日時を記録するためにタイムスタンプを使用します。
-
API レスポンス:多くのウェブ API は、データが生成された日時やリソースが最後に変更された日時を示すためにタイムスタンプを含めます。
-
ファイルシステム:ファイルの作成および変更時刻は、通常 Unix タイムスタンプとして保存されます。
-
セッション管理:ウェブアプリケーションは、ユーザーセッションがいつ期限切れになるべきかを判断するためにタイムスタンプを使用します。
-
データ分析:タイムスタンプは、分析アプリケーションでの時間データを扱うための標準化された方法を提供します。
代替手段
Unix タイムスタンプは広く使用されていますが、特定のコンテキストではより適切な時間表現形式が存在します。
-
ISO 8601:標準化された文字列形式(例: "2021-01-01T00:00:00Z")で、人間が読みやすく、並べ替え可能です。データのやり取りやユーザー向けアプリケーションにおいて好まれることが多いです。
-
RFC 3339:インターネットプロトコルで使用される ISO 8601 のプロファイルで、厳密なフォーマット要件があります。
-
人間が読みやすい形式:ローカライズされた日付文字列(例: "2021年1月1日")は、直接的なユーザーインタラクションにはより適していますが、計算にはあまり適していません。
-
Microsoft FILETIME:Windows システムで使用される、1601年1月1日からの 100 ナノ秒間隔の 64 ビット値です。
-
ユリウス日数:天文学や一部の科学アプリケーションで使用され、紀元前4713年1月1日からの日数をカウントします。
時間形式の選択は、次のような要因によって異なります:
- 必要な精度
- 人間の可読性のニーズ
- ストレージ制約
- 既存システムとの互換性
- 表現する必要がある日付の範囲
歴史
Unix 時間の概念は、1960年代後半から1970年代初頭にかけて、ベル研究所で Unix オペレーティングシステムの開発とともに生まれました。エポックとして1970年1月1日を使用することに決定したのは、やや任意でしたが、当時の実用的な選択でした。関心のある日付のストレージ要件を最小限に抑えるためには最近のものであり、歴史的データにとっては十分に過去のものでした。
元の実装では、経過した秒数を保存するために 32 ビット符号付き整数が使用されており、当時の Unix システムの予想される寿命には十分でした。しかし、この決定は2038年問題(時に「Y2K38」や「Unix ミレニアムバグ」と呼ばれる)につながりました。32 ビット符号付き整数は、1970年1月1日からの秒数を表現できる最大値を持ち、2038年1月19日(03:14:07 UTC)までしか表現できません。
Unix および Unix 系のオペレーティングシステムが人気を博するにつれて、Unix タイムスタンプはコンピューティングにおける事実上の標準となりました。これは、数多くのプログラミング言語、データベース、アプリケーションに採用され、元の Unix 環境を超えて広がりました。
現代のシステムでは、タイムスタンプに 64 ビット整数を使用することが増えており、エポックから約 292 億年の範囲を表現できるようになり、2038年問題を効果的に解決しています。しかし、レガシーシステムやアプリケーションは依然として脆弱な場合があります。
Unix タイムスタンプのシンプルさと有用性は、より洗練された時間表現形式の開発にもかかわらず、その関連性を維持しています。デジタルインフラストラクチャの多くを支える基本的な概念として残っています。
コード例
以下は、さまざまなプログラミング言語で Unix タイムスタンプを人間が読みやすい日付に変換する方法の例です。
1// JavaScript タイムスタンプ変換
2function convertUnixTimestamp(timestamp, use12Hour = false) {
3 // 新しい Date オブジェクトを作成(JavaScript はミリ秒を使用)
4 const date = new Date(timestamp * 1000);
5
6 // フォーマットオプション
7 const options = {
8 year: 'numeric',
9 month: 'long',
10 day: 'numeric',
11 weekday: 'long',
12 hour: use12Hour ? 'numeric' : '2-digit',
13 minute: '2-digit',
14 second: '2-digit',
15 hour12: use12Hour
16 };
17
18 // ロケールフォーマットを使用して文字列に変換
19 return date.toLocaleString(undefined, options);
20}
21
22// 使用例
23const timestamp = 1609459200; // 2021年1月1日 00:00:00 UTC
24console.log(convertUnixTimestamp(timestamp, false)); // 24 時間形式
25console.log(convertUnixTimestamp(timestamp, true)); // 12 時間形式
26
1# Python タイムスタンプ変換
2import datetime
3
4def convert_unix_timestamp(timestamp, use_12hour=False):
5 # Unix タイムスタンプを datetime オブジェクトに変換
6 date = datetime.datetime.fromtimestamp(timestamp)
7
8 # 日付文字列のフォーマット
9 if use_12hour:
10 format_string = "%A, %B %d, %Y %I:%M:%S %p" # 12 時間形式(AM/PM)
11 else:
12 format_string = "%A, %B %d, %Y %H:%M:%S" # 24 時間形式
13
14 return date.strftime(format_string)
15
16# 使用例
17timestamp = 1609459200 # 2021年1月1日 00:00:00 UTC
18print(convert_unix_timestamp(timestamp, False)) # 24 時間形式
19print(convert_unix_timestamp(timestamp, True)) # 12 時間形式
20
1<?php
2// PHP タイムスタンプ変換
3function convertUnixTimestamp($timestamp, $use12Hour = false) {
4 // フォーマット文字列
5 $formatString = $use12Hour
6 ? 'l, F j, Y g:i:s A' // 12 時間形式(AM/PM)
7 : 'l, F j, Y H:i:s'; // 24 時間形式
8
9 // 日付を変換してフォーマット
10 return date($formatString, $timestamp);
11}
12
13// 使用例
14$timestamp = 1609459200; // 2021年1月1日 00:00:00 UTC
15echo convertUnixTimestamp($timestamp, false) . "\n"; // 24 時間形式
16echo convertUnixTimestamp($timestamp, true) . "\n"; // 12 時間形式
17?>
18
1// Java タイムスタンプ変換
2import java.time.Instant;
3import java.time.LocalDateTime;
4import java.time.ZoneId;
5import java.time.format.DateTimeFormatter;
6
7public class UnixTimestampConverter {
8 public static String convertUnixTimestamp(long timestamp, boolean use12Hour) {
9 // Unix タイムスタンプを Instant に変換し、次に LocalDateTime に変換
10 Instant instant = Instant.ofEpochSecond(timestamp);
11 LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
12
13 // 必要に応じてフォーマッタを作成
14 DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
15 use12Hour ? "EEEE, MMMM d, yyyy h:mm:ss a" : "EEEE, MMMM d, yyyy HH:mm:ss"
16 );
17
18 // 日付をフォーマット
19 return dateTime.format(formatter);
20 }
21
22 public static void main(String[] args) {
23 long timestamp = 1609459200; // 2021年1月1日 00:00:00 UTC
24 System.out.println(convertUnixTimestamp(timestamp, false)); // 24 時間形式
25 System.out.println(convertUnixTimestamp(timestamp, true)); // 12 時間形式
26 }
27}
28
1// C# タイムスタンプ変換
2using System;
3
4class UnixTimestampConverter
5{
6 public static string ConvertUnixTimestamp(long timestamp, bool use12Hour)
7 {
8 // Unix タイムスタンプを DateTime に変換
9 // Unix タイムスタンプは 1970-01-01 からの秒数
10 DateTime dateTime = DateTimeOffset.FromUnixTimeSeconds(timestamp).DateTime;
11
12 // 12 時間形式または 24 時間形式に基づいてフォーマット文字列を設定
13 string formatString = use12Hour
14 ? "dddd, MMMM d, yyyy h:mm:ss tt" // 12 時間形式(AM/PM)
15 : "dddd, MMMM d, yyyy HH:mm:ss"; // 24 時間形式
16
17 // フォーマットされた日付文字列を返す
18 return dateTime.ToString(formatString);
19 }
20
21 static void Main()
22 {
23 long timestamp = 1609459200; // 2021年1月1日 00:00:00 UTC
24 Console.WriteLine(ConvertUnixTimestamp(timestamp, false)); // 24 時間形式
25 Console.WriteLine(ConvertUnixTimestamp(timestamp, true)); // 12 時間形式
26 }
27}
28
1# Ruby タイムスタンプ変換
2require 'time'
3
4def convert_unix_timestamp(timestamp, use_12hour = false)
5 # Unix タイムスタンプを Time オブジェクトに変換
6 time = Time.at(timestamp)
7
8 # 12 時間形式または 24 時間形式に基づいてフォーマット
9 if use_12hour
10 time.strftime("%A, %B %d, %Y %I:%M:%S %p") # 12 時間形式(AM/PM)
11 else
12 time.strftime("%A, %B %d, %Y %H:%M:%S") # 24 時間形式
13 end
14end
15
16# 使用例
17timestamp = 1609459200 # 2021年1月1日 00:00:00 UTC
18puts convert_unix_timestamp(timestamp, false) # 24 時間形式
19puts convert_unix_timestamp(timestamp, true) # 12 時間形式
20
1// Go タイムスタンプ変換
2package main
3
4import (
5 "fmt"
6 "time"
7)
8
9func convertUnixTimestamp(timestamp int64, use12Hour bool) string {
10 // Unix タイムスタンプを Time に変換
11 t := time.Unix(timestamp, 0)
12
13 // 12 時間形式または 24 時間形式に基づいてフォーマット文字列を設定
14 formatString := "Monday, January 2, 2006 "
15 if use12Hour {
16 formatString += "3:04:05 PM" // 12 時間形式(AM/PM)
17 } else {
18 formatString += "15:04:05" // 24 時間形式
19 }
20
21 // フォーマットされた時間を返す
22 return t.Format(formatString)
23}
24
25func main() {
26 timestamp := int64(1609459200) // 2021年1月1日 00:00:00 UTC
27 fmt.Println(convertUnixTimestamp(timestamp, false)) // 24 時間形式
28 fmt.Println(convertUnixTimestamp(timestamp, true)) // 12 時間形式
29}
30
1// Swift タイムスタンプ変換
2import Foundation
3
4func convertUnixTimestamp(_ timestamp: Int, use12Hour: Bool) -> String {
5 // Unix タイムスタンプから Date を作成
6 let date = Date(timeIntervalSince1970: TimeInterval(timestamp))
7
8 // DateFormatter を作成
9 let formatter = DateFormatter()
10 formatter.dateStyle = .full
11
12 // 12 時間形式または 24 時間形式に基づいて時間スタイルを設定
13 if use12Hour {
14 formatter.timeStyle = .medium
15 formatter.amSymbol = "AM"
16 formatter.pmSymbol = "PM"
17 } else {
18 formatter.timeStyle = .medium
19 formatter.dateFormat = formatter.dateFormat?.replacingOccurrences(of: "h:mm:ss a", with: "HH:mm:ss")
20 }
21
22 // フォーマットされた日付を返す
23 return formatter.string(from: date)
24}
25
26// 使用例
27let timestamp = 1609459200 // 2021年1月1日 00:00:00 UTC
28print(convertUnixTimestamp(timestamp, use12Hour: false)) // 24 時間形式
29print(convertUnixTimestamp(timestamp, use12Hour: true)) // 12 時間形式
30
1# R タイムスタンプ変換
2convert_unix_timestamp <- function(timestamp, use_12hour = FALSE) {
3 # Unix タイムスタンプを POSIXct 日時に変換
4 date_time <- as.POSIXct(timestamp, origin = "1970-01-01", tz = "UTC")
5
6 # 12 時間形式または 24 時間形式に基づいてフォーマット
7 if (use_12hour) {
8 format_string <- "%A, %B %d, %Y %I:%M:%S %p" # 12 時間形式(AM/PM)
9 } else {
10 format_string <- "%A, %B %d, %Y %H:%M:%S" # 24 時間形式
11 }
12
13 # フォーマットされた日付文字列を返す
14 format(date_time, format_string)
15}
16
17# 使用例
18timestamp <- 1609459200 # 2021年1月1日 00:00:00 UTC
19cat(convert_unix_timestamp(timestamp, FALSE), "\n") # 24 時間形式
20cat(convert_unix_timestamp(timestamp, TRUE), "\n") # 12 時間形式
21
1% MATLAB タイムスタンプ変換
2function formattedDate = convertUnixTimestamp(timestamp, use12Hour)
3 % Unix タイムスタンプを MATLAB datetime に変換
4 % MATLAB の日付は 1900-01-01 からの日数で、1 = 1900-01-01
5 % Unix タイムスタンプは 1970-01-01 からの秒数
6
7 % まず Excel 日付形式に変換
8 % 25569 は 1900-01-01 と 1970-01-01 の間の日数です
9 excelDate = (timestamp / 86400) + 25569;
10
11 % 12 時間形式または 24 時間形式に基づいてフォーマット
12 if use12Hour
13 formattedDate = datestr(excelDate, 'dddd, mmmm d, yyyy h:mm:ss AM/PM');
14 else
15 formattedDate = datestr(excelDate, 'dddd, mmmm d, yyyy hh:mm:ss');
16 end
17end
18
19% 使用例
20timestamp = 1609459200; % 2021年1月1日 00:00:00 UTC
21disp(convertUnixTimestamp(timestamp, false)) % 24 時間形式
22disp(convertUnixTimestamp(timestamp, true)) % 12 時間形式
23
1' Excel VBA タイムスタンプ変換
2Function ConvertUnixTimestamp(timestamp As Long, Optional use12Hour As Boolean = False) As String
3 ' Unix タイムスタンプを Excel 日付/時刻に変換
4 ' Excel の日付は 1900-01-01 からの日数で、1 = 1900-01-01
5 ' Unix タイムスタンプは 1970-01-01 からの秒数
6
7 ' まず Excel 日付形式に変換
8 ' 25569 は 1900-01-01 と 1970-01-01 の間の日数です
9 Dim excelDate As Double
10 excelDate = (timestamp / 86400) + 25569
11
12 ' 12 時間形式または 24 時間形式に基づいてフォーマット
13 If use12Hour Then
14 ConvertUnixTimestamp = Format(excelDate, "dddd, mmmm d, yyyy h:mm:ss AM/PM")
15 Else
16 ConvertUnixTimestamp = Format(excelDate, "dddd, mmmm d, yyyy hh:mm:ss")
17 End If
18End Function
19
20' ワークシートでの使用:
21' =ConvertUnixTimestamp(1609459200, TRUE) ' 12 時間形式
22' =ConvertUnixTimestamp(1609459200, FALSE) ' 24 時間形式
23
エッジケースの処理
Unix タイムスタンプを扱う際には、エッジケースを正しく処理することが重要です。以下は、一般的なエッジケースの処理例です。
1// JavaScript エッジケース処理
2function safeConvertTimestamp(timestamp, use12Hour = false) {
3 // タイムスタンプが有効かどうかをチェック
4 if (timestamp === undefined || timestamp === null || isNaN(timestamp)) {
5 return "無効なタイムスタンプ";
6 }
7
8 // 負のタイムスタンプ(1970年以前の日付)をチェック
9 if (timestamp < 0) {
10 // 一部のブラウザは負のタイムスタンプを正しく処理できない場合があります
11 // 1970年以前の日付をより堅牢な方法で処理します
12 const date = new Date(timestamp * 1000);
13 if (isNaN(date.getTime())) {
14 return "無効な日付(1970年以前)";
15 }
16 }
17
18 // Y2K38 問題をチェック(32 ビットシステムの場合)
19 const maxInt32 = 2147483647; // 32 ビット符号付き整数の最大値
20 if (timestamp > maxInt32) {
21 // 最新の JavaScript では非常に大きなタイムスタンプに BigInt を使用することを検討します
22 console.warn("タイムスタンプが 32 ビット整数の制限を超えています(Y2K38 問題)");
23 }
24
25 // 通常の変換を進める
26 try {
27 const date = new Date(timestamp * 1000);
28 const options = {
29 year: 'numeric',
30 month: 'long',
31 day: 'numeric',
32 weekday: 'long',
33 hour: use12Hour ? 'numeric' : '2-digit',
34 minute: '2-digit',
35 second: '2-digit',
36 hour12: use12Hour
37 };
38 return date.toLocaleString(undefined, options);
39 } catch (error) {
40 return "タイムスタンプの変換中にエラーが発生しました: " + error.message;
41 }
42}
43
参考文献
-
"Unix Time." Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/Unix_time
-
"Year 2038 Problem." Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/Year_2038_problem
-
Olson, Arthur David. "The Complexities of Calendrical Time." The Open Group, https://www.usenix.org/legacy/events/usenix01/full_papers/olson/olson.pdf
-
"ISO 8601." Wikipedia, Wikimedia Foundation, https://en.wikipedia.org/wiki/ISO_8601
-
"RFC 3339: Date and Time on the Internet: Timestamps." Internet Engineering Task Force (IETF), https://tools.ietf.org/html/rfc3339
-
Kernighan, Brian W., and Dennis M. Ritchie. "The C Programming Language." Prentice Hall, 1988.
フィードバック
フィードバックトーストをクリックして、このツールについてのフィードバックを始めてください
関連ツール
ワークフローに役立つかもしれない他のツールを発見してください