写真の撮影日時をEXIFから抽出
カメラが書き込んだ2023:06:15 14:30:45を、2023-06-15と14:30:45、さらに2023-06-15T14:30:45という読みやすい形に変換します。存在しない日付は弾き、タイムゾーンを勝手に付けることもありません。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 元の日時
- 2023:06:15 14:30:45
- 日付
- 2023-06-15
- 時間
- 14:30:45
- Iso
- 2023-06-15T14:30:45
- 年
- 2,023
カメラやスマートフォンは撮影時刻を EXIF の DateTimeOriginal タグに、コロン区切りの独特な形式で書き込みます。年・月・日をコロンでつなぎ、空白のあとに時・分・秒が続きます。ギャラリーの並べ替え、タイムライン作成、ファイル名の付与を行うパイプラインでは、その瞬間を生の EXIF 文字列ではなく、通常の ISO カレンダー日付と時計時刻として扱う必要があります。本機能は DateTimeOriginal 文字列を受け取り、実在するグレゴリオ暦の日と妥当な時刻であることを検証し、YYYY-MM-DD、HH:MM:SS、およびタイムゾーンを捏造しない結合済みのローカル ISO-8601 日時を返します。
EXIF DateTimeOriginal の見た目と ISO が重要な理由
Exif メタデータを埋め込むデジタルカメラは、撮影時刻を DateTimeOriginal に保存できます。Exif 2.x 仕様では、その値を二十文字の固定形で記録します。年四桁、コロン、月二桁、コロン、日二桁、空白一つ、続いて二桁の時・分・秒がコロン区切りです。
この並びは ISO-8601 でも Unix タイムスタンプでもありません。文字列の辞書順ソートが効くのは年が先頭にあるからだけであり、EXIF 値を表計算、SQL の日付列、JavaScript の Date コンストラクタにそのまま渡すと、日付部分のコロンを書き換えない限り失敗します。
写真家にとっても DateTimeOriginal は撮影時刻であり、画像編集ソフトが書き換える FileModifyDate や最終編集スタンプではありません。本ツールは画像ファイル自体を開きません。EXIF ライブラリ、ダンプ、サイドカーから既に読み取ったタグ文字列を渡してください。
これにより能力は純粋な parse の tier A のまま、ブラウザで無料、テストで決定的になります。タグが欠落・空・期待パターン外のときは推測せずタスクが失敗します。
入力契約、応答形、検証ルール
値は前後空白除去後に YYYY:MM:DD HH:MM:SS と一致する必要があります。日付が EXIF コロンのままなら、日付と時刻のあいだは空白一つ、または文字 T でも解析します。年は 0001 から 9999、月は 01–12 です。
日はその月にグレゴリオ暦のうるう年規則で存在しなければなりません(二月が二十九日になるのは年が四で割り切れるときだけで、四百で割り切れない世紀年は例外です)。時は 00–23、分と秒は 00–59 です。
例:2023:06:15 14:30:45 は date 2023-06-15、time 14:30:45、iso 2023-06-15T14:30:45 になります。うるう日の例:2024:02:29 00:00:00 は成功、2023:02:29 12:00:00 は失敗です。
EXIF から写真日付を抽出する価値がある場面
写真エージェンシーや DAM は取込前に撮影日を正規化し、mtimes を上書きしたマシン間でコピーされても撮影日検索の精度を保ちます。報道デスクや法的証拠のワークフローでは、自由文の日付ではなくカメラの DateTimeOriginal を防御可能な形で解析する必要があります。
撮影日でアップロードをリネームするソーシャルや EC のパイプラインは、一括 EXIF 抽出のあとに小さな parse 手順を呼び、ファイル名を安定させます。写真の撮影日時を EXIF から抽出」のような検索意図に答えるコンテンツサイトは、フル EXIF ダンプの雑音のない集中ランディングの恩恵を受けます。検証失敗は残高を消費しません。
活用例
DAM とギャラリー取込
一括写真取込の EXIF DateTimeOriginal を ISO 日付へ変換し、アルバム・フィルタ・データベース列の並べ替えに使います。
ファイル名とタイムライン付与
ファイル更新時刻を信用せず、カメラタグから撮影日ファイル名と編集用タイムラインを組み立てます。
証拠とコンプライアンス確認
アーカイブやディスカバリ出力の前に、主張された撮影タイムスタンプが整形式の EXIF DateTimeOriginal と一致するか検証します。
よくある質問
EXIF DateTimeOriginal の形式は何ですか?
カメラは日付部分をコロン区切りの YYYY:MM:DD HH:MM:SS として保存します。本ツールはその文字列を ISO 日付・時刻・結合ローカル ISO 日時に解析します。
このツールは画像ファイルを読みますか?
いいえ。 既に抽出した DateTimeOriginal 文字列を渡してください。能力は純粋な parse のまま、ブラウザで無料、バイナリ I/O なしです。
タグが欠落または不正な場合はどうなりますか?
空値、誤った区切り、存在しない暦日、範囲外の時刻はすべて拒否されます。
結果はタイムゾーンを考慮しますか?
いいえ。 EXIF DateTimeOriginal はゾーンなしのローカル壁時計スタンプです。
ファイルの更新日時ではなく撮影日時を使うのはなぜですか?
撮影日時は写真を撮った瞬間を記録しますが、更新日時はファイルを別のパソコンにコピーしたり編集したりするたびに変わるためです。撮影日時で並べれば、撮影の順番がそのまま保たれます。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/image/exif-date-extract \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"datetime_original":"2023:06:15 14:30:45"}'const res = await fetch("https://api.kit.forhosting.com/image/exif-date-extract", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"datetime_original": "2023:06:15 14:30:45"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/image/exif-date-extract",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"datetime_original": "2023:06:15 14:30:45"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/image/exif-date-extract", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"datetime_original":"2023:06:15 14:30:45"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"datetime_original":"2023:06:15 14:30:45"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/image/exif-date-extract", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"datetime_original": "2023:06:15 14:30:45"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "image.exif_date_extract",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_mb | 15 |
max_megapixels | 12 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
タグ欠落や不正な値は invalid_input で明確に失敗し、自動化がゴミを成功扱いにしません。
EXIF DateTimeOriginal の見た目と ISO が重要な理由
DateTimeOriginal を ISO 日付(YYYY-MM-DD)、ISO 時刻(HH:MM:SS)、結合ローカル ISO 文字列(YYYY-MM-DDTHH:MM:SS)へ変換すると、データベース、CSV 取込、フロントエンドの日付ピッカーがすでに理解するフィールドが得られます。二月三十一日、二十五時、平年の二月二十九日など存在しない暦日のときも、同じ invalid_input 経路が呼び出し元を静かな破損から守ります。一列で足りるときは iso フィールドを、暦日と時刻を分けるスキーマでは date と time を使ってください。
入力契約、応答形、検証ルール
必須の文字列フィールド datetime_original を含む JSON 本体を POST してください。上流の EXIF リーダーが別キーを使う場合に備え、date_time_original、exif_datetime、taken_at の別名も受け付けます。成功時は空白一つの正規 datetime_original をエコーし、さらに date、time、iso、および整数成分 year、month、day、hour、minute、second を返し、クライアントが再解析なしで整形できます。欠落フィールド、文字列以外の型、日付に EXIF コロンがない 2023-06-15 14:30:45 のような誤区切り、範囲外成分はすべて invalid_input となり課金されません。
EXIF から写真日付を抽出する価値がある場面
プロセス内で既に EXIF を読むモバイルアプリも、サーバー側が Postgres TIMESTAMPTZ や JSON API へ書く前に同じ文字列を再検証するなら、このエンドポイントを呼べます。「
技術的な質問
EXIF から写真日付を抽出する料金は?
ブラウザツールは無料です。API リクエストは成功呼び出しごとに KIT の前払い残高から $0.002 です。無効入力は課金されません。