jpskill.com
💬 コミュニケーション コミュニティ

date-time-cli

コマンドラインで日付や時刻、タイムゾーン、エポックタイムスタンプを自在に操作し、変換や計算、書式設定などを行うSkill。

📜 元の英語説明(参考)

Date, time, timezone, and epoch timestamp manipulation from the command line. Use when user mentions "date command", "timestamp", "epoch", "unix timestamp", "timezone conversion", "date math", "date formatting", "ISO 8601", "convert timestamp", "time ago", or any date/time manipulation in shell.

🇯🇵 日本人クリエイター向け解説

一言でいうと

コマンドラインで日付や時刻、タイムゾーン、エポックタイムスタンプを自在に操作し、変換や計算、書式設定などを行うSkill。

※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。

詳しい使い方ガイドを見る →
最終更新
2026-05-17
取得日時
2026-05-17
同梱ファイル
1

📖 Skill本文(日本語訳)

※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。

[スキル名] date-time-cli

日付と時刻のCLI

現在の日付と時刻

date                        # システムのデフォルト形式
date +%s                    # エポック秒 (Unixタイムスタンプ)
date +%Y-%m-%d              # 2026-04-13
date +"%Y-%m-%d %H:%M:%S"  # 2026-04-13 14:30:00
date +%T                    # 14:30:00 (%H:%M:%Sの省略形)
date -u                     # UTC時刻

フォーマット文字列

トークン 意味
%Y 4桁の年 2026
%m 月 (01-12) 04
%d 日 (01-31) 13
%H 時 24時間 (00-23) 14
%M 分 (00-59) 30
%S 秒 (00-59) 45
%s エポック秒 1681400000
%N ナノ秒 (GNU) 123456789
%Z タイムゾーン名 EDT
%z タイムゾーンオフセット -0400
%A 曜日の名前 Monday
%a 曜日の略称 Mon
%B 月の名前 April
%j 年の日数 103
%u 曜日 (1=月) 1
%F 省略形 %Y-%m-%d 2026-04-13

macOSとGNU date -- 重要な違い

macOSにはBSD dateが搭載されています。LinuxにはGNU dateが搭載されています。これらは互換性がありません。

日付文字列の解析

# GNU (Linux)
date -d "2026-04-13 14:30:00" +%s

# macOS (BSD)
date -j -f "%Y-%m-%d %H:%M:%S" "2026-04-13 14:30:00" +%s

日付の計算

# GNU (Linux) -- 相対文字列で-dを使用
date -d "now + 3 days"
date -d "2026-04-13 + 2 hours"
date -d "yesterday"
date -d "last monday"

# macOS (BSD) -- 調整フラグで-vを使用
date -v+3d                  # 今から3日後
date -v-2H                  # 2時間前
date -v+1m                  # 今から1ヶ月後 (小文字のm = 月)
date -v+30M                 # 今から30分後 (大文字のM = 分)
date -v-1y                  # 1年前
date -v+1w                  # 今から1週間後

macOSの-vフラグ: y 年、m 月、w 週、d 日、H 時、M 分、S 秒。

エポック変換

エポック: 10桁 (例: 1681400000)。エポックミリ秒: 13桁 (例: 1681400000000)。13桁の場合は、まず1000で割ってください。

# 秒から人間が読める形式へ
# GNU
date -d @1681400000
# macOS
date -r 1681400000

# ミリ秒から人間が読める形式へ
# GNU
date -d @$((1681400000000 / 1000))
# macOS
date -r $((1681400000000 / 1000))

# 人間が読める形式からエポック秒へ
# GNU
date -d "2026-04-13T14:30:00" +%s
# macOS
date -j -f "%Y-%m-%dT%H:%M:%S" "2026-04-13T14:30:00" +%s

# 現在のエポック
date +%s

ISO 8601

# GNU
date --iso-8601=seconds          # 2026-04-13T14:30:00-04:00

# macOS (--iso-8601フラグがないため、手動で構築)
date -u +"%Y-%m-%dT%H:%M:%SZ"   # 2026-04-13T18:30:00Z
date +"%Y-%m-%dT%H:%M:%S%z"     # 2026-04-13T14:30:00-0400

注: ISO 8601では-04:00が望ましく、-0400ではありません。GNUはこれを処理しますが、macOSでは自分でコロンを挿入してください。

タイムゾーン変換

# 特定のタイムゾーンで時刻を表示 (GNUとmacOSの両方で動作)
TZ="America/New_York" date
TZ="Europe/London" date
TZ="Asia/Tokyo" date
TZ="UTC" date

# 特定のタイムスタンプを別のタイムゾーンに変換
# GNU
TZ="Asia/Tokyo" date -d "2026-04-13 14:30:00 EDT"
# macOS
epoch=$(date -j -f "%Y-%m-%d %H:%M:%S" "2026-04-13 14:30:00" +%s)
TZ="Asia/Tokyo" date -r "$epoch"

# 利用可能なタイムゾーンをリスト表示
ls /usr/share/zoneinfo/America/

2つの日付を比較する

両方をエポックに変換してから比較します。

# GNU
d1=$(date -d "2026-04-13" +%s)
d2=$(date -d "2026-05-01" +%s)

# macOS
d1=$(date -j -f "%Y-%m-%d" "2026-04-13" +%s)
d2=$(date -j -f "%Y-%m-%d" "2026-05-01" +%s)

# 比較
if [ "$d1" -lt "$d2" ]; then
  echo "d1 is earlier"
fi

# 日数の差
diff_days=$(( (d2 - d1) / 86400 ))
echo "$diff_days days apart"

文字列からの日付解析

# GNU dateは非常に柔軟です
date -d "April 13, 2026" +%F
date -d "13 Apr 2026" +%F
date -d "next friday" +%F
date -d "2 weeks ago" +%F

# macOSは正確なフォーマット指定が必要です
date -j -f "%B %d, %Y" "April 13, 2026" +%F
date -j -f "%d %b %Y" "13 Apr 2026" +%F

便利なワンライナー

このタイムスタンプはどれくらい前か

# エポックタイムスタンプが与えられた場合
ts=1681400000
now=$(date +%s)
diff=$((now - ts))
echo "$((diff / 86400)) days, $(( (diff % 86400) / 3600 )) hours ago"

ある日付は何曜日だったか

# GNU
date -d "2026-04-13" +%A        # Monday

# macOS
date -j -f "%Y-%m-%d" "2026-04-13" +%A

2つのタイムスタンプ間の秒数

# GNU
echo $(( $(date -d "2026-05-01" +%s) - $(date -d "2026-04-13" +%s) ))

# macOS
echo $(( $(date -j -f "%Y-%m-%d" "2026-05-01" +%s) - $(date -j -f "%Y-%m-%d" "2026-04-13" +%s) ))

相対時間の記述

relative_time() {
  local diff=$(( $(date +%s) - $1 ))
  if   [ $diff -lt 60 ];    then echo "${diff}s ago"
  elif [ $diff -lt 3600 ];  then echo "$((diff/60))m ago"
  elif [ $diff -lt 86400 ]; then echo "$((diff/3600))h ago"
  else echo "$((diff/86400))d ago"
  fi
}
relative_time 1681400000

スクリプトでの日付

タイムスタンプ付きファイル名の生成

backup_file="db-backup-$(date +%Y%m%d-%H%M%S).sql.gz"
log_file="deploy-$(date +%F).log"

ログのタイムスタンプ

log() { echo "[$(date +"%Y-%m-%d %H:%M:%S")] $*"; }
log "Deployment started"
# [2026-04-13 14:30:00] Deployment started

経過時間の測定

start=$(date +%s)
# ... 作業を実行 ...
echo "Took $(( $(date +%s) - start ))s"

dateだけでは不十分な場合

Python

python3 -c "from dateutil.parser import parse; print(parse('April 13, 2026 2:30 PM').isoformat())"
python3 -c "from datetime import datetime; print(datetime.fromtimestamp(1681400000000/1000))"
python3 -c "from datetime import datetime,timezone; print((datetime.now(timezone.utc)-datetime(2026,4,13,tzinfo=timezone.utc)).total_seconds())"
python3 -c "from datetime import datetime; from zoneinfo import ZoneInfo; print(datetime.now(ZoneInfo('Asia/Toky
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開

Date & Time CLI

Current Date and Time

date                        # system default format
date +%s                    # epoch seconds (Unix timestamp)
date +%Y-%m-%d              # 2026-04-13
date +"%Y-%m-%d %H:%M:%S"  # 2026-04-13 14:30:00
date +%T                    # 14:30:00 (shorthand for %H:%M:%S)
date -u                     # UTC time

Format Strings

Token Meaning Example
%Y 4-digit year 2026
%m Month (01-12) 04
%d Day (01-31) 13
%H Hour 24h (00-23) 14
%M Minute (00-59) 30
%S Second (00-59) 45
%s Epoch seconds 1681400000
%N Nanoseconds (GNU) 123456789
%Z Timezone name EDT
%z Timezone offset -0400
%A Day of week name Monday
%a Day abbrev Mon
%B Month name April
%j Day of year 103
%u Day of week (1=Mon) 1
%F Shorthand %Y-%m-%d 2026-04-13

macOS vs GNU date -- Critical Differences

macOS ships BSD date. Linux ships GNU date. They are not compatible.

Parse a date string

# GNU (Linux)
date -d "2026-04-13 14:30:00" +%s

# macOS (BSD)
date -j -f "%Y-%m-%d %H:%M:%S" "2026-04-13 14:30:00" +%s

Date math

# GNU (Linux) -- use -d with relative strings
date -d "now + 3 days"
date -d "2026-04-13 + 2 hours"
date -d "yesterday"
date -d "last monday"

# macOS (BSD) -- use -v with adjustment flags
date -v+3d                  # 3 days from now
date -v-2H                  # 2 hours ago
date -v+1m                  # 1 month from now (lowercase m = month)
date -v+30M                 # 30 minutes from now (uppercase M = minute)
date -v-1y                  # 1 year ago
date -v+1w                  # 1 week from now

macOS -v flags: y year, m month, w week, d day, H hour, M minute, S second.

Epoch Conversions

Epoch seconds: 10 digits (e.g., 1681400000). Epoch milliseconds: 13 digits (e.g., 1681400000000). If 13 digits, divide by 1000 first.

# Seconds to human-readable
# GNU
date -d @1681400000
# macOS
date -r 1681400000

# Milliseconds to human-readable
# GNU
date -d @$((1681400000000 / 1000))
# macOS
date -r $((1681400000000 / 1000))

# Human-readable to epoch seconds
# GNU
date -d "2026-04-13T14:30:00" +%s
# macOS
date -j -f "%Y-%m-%dT%H:%M:%S" "2026-04-13T14:30:00" +%s

# Current epoch
date +%s

ISO 8601

# GNU
date --iso-8601=seconds          # 2026-04-13T14:30:00-04:00

# macOS (no --iso-8601 flag, construct manually)
date -u +"%Y-%m-%dT%H:%M:%SZ"   # 2026-04-13T18:30:00Z
date +"%Y-%m-%dT%H:%M:%S%z"     # 2026-04-13T14:30:00-0400

Note: ISO 8601 wants -04:00 not -0400. GNU handles this; on macOS insert the colon yourself.

Timezone Conversion

# Show time in a specific timezone (works on both GNU and macOS)
TZ="America/New_York" date
TZ="Europe/London" date
TZ="Asia/Tokyo" date
TZ="UTC" date

# Convert a specific timestamp to another timezone
# GNU
TZ="Asia/Tokyo" date -d "2026-04-13 14:30:00 EDT"
# macOS
epoch=$(date -j -f "%Y-%m-%d %H:%M:%S" "2026-04-13 14:30:00" +%s)
TZ="Asia/Tokyo" date -r "$epoch"

# List available timezones
ls /usr/share/zoneinfo/America/

Compare Two Dates

Convert both to epoch, then compare.

# GNU
d1=$(date -d "2026-04-13" +%s)
d2=$(date -d "2026-05-01" +%s)

# macOS
d1=$(date -j -f "%Y-%m-%d" "2026-04-13" +%s)
d2=$(date -j -f "%Y-%m-%d" "2026-05-01" +%s)

# Compare
if [ "$d1" -lt "$d2" ]; then
  echo "d1 is earlier"
fi

# Difference in days
diff_days=$(( (d2 - d1) / 86400 ))
echo "$diff_days days apart"

Parse Dates from Strings

# GNU date is very flexible
date -d "April 13, 2026" +%F
date -d "13 Apr 2026" +%F
date -d "next friday" +%F
date -d "2 weeks ago" +%F

# macOS requires exact format specification
date -j -f "%B %d, %Y" "April 13, 2026" +%F
date -j -f "%d %b %Y" "13 Apr 2026" +%F

Useful One-Liners

How long ago was this timestamp

# Given an epoch timestamp
ts=1681400000
now=$(date +%s)
diff=$((now - ts))
echo "$((diff / 86400)) days, $(( (diff % 86400) / 3600 )) hours ago"

What day of the week was a date

# GNU
date -d "2026-04-13" +%A        # Monday

# macOS
date -j -f "%Y-%m-%d" "2026-04-13" +%A

Seconds between two timestamps

# GNU
echo $(( $(date -d "2026-05-01" +%s) - $(date -d "2026-04-13" +%s) ))

# macOS
echo $(( $(date -j -f "%Y-%m-%d" "2026-05-01" +%s) - $(date -j -f "%Y-%m-%d" "2026-04-13" +%s) ))

Relative time description

relative_time() {
  local diff=$(( $(date +%s) - $1 ))
  if   [ $diff -lt 60 ];    then echo "${diff}s ago"
  elif [ $diff -lt 3600 ];  then echo "$((diff/60))m ago"
  elif [ $diff -lt 86400 ]; then echo "$((diff/3600))h ago"
  else echo "$((diff/86400))d ago"
  fi
}
relative_time 1681400000

Date in Scripts

Generate timestamped filenames

backup_file="db-backup-$(date +%Y%m%d-%H%M%S).sql.gz"
log_file="deploy-$(date +%F).log"

Log timestamps

log() { echo "[$(date +"%Y-%m-%d %H:%M:%S")] $*"; }
log "Deployment started"
# [2026-04-13 14:30:00] Deployment started

Measure elapsed time

start=$(date +%s)
# ... do work ...
echo "Took $(( $(date +%s) - start ))s"

When date Is Not Enough

Python

python3 -c "from dateutil.parser import parse; print(parse('April 13, 2026 2:30 PM').isoformat())"
python3 -c "from datetime import datetime; print(datetime.fromtimestamp(1681400000000/1000))"
python3 -c "from datetime import datetime,timezone; print((datetime.now(timezone.utc)-datetime(2026,4,13,tzinfo=timezone.utc)).total_seconds())"
python3 -c "from datetime import datetime; from zoneinfo import ZoneInfo; print(datetime.now(ZoneInfo('Asia/Tokyo')))"

Node

node -e "console.log(new Date(1681400000000).toISOString())"
node -e "console.log(new Date('April 13, 2026').toISOString())"
node -e "console.log(Date.now())"                              # current epoch ms
node -e "console.log((Date.now() - new Date('2026-04-13').getTime()) / 3600000, 'hours')"

Quick Reference

Task GNU (Linux) macOS (BSD)
Current epoch date +%s date +%s
Epoch to date date -d @EPOCH date -r EPOCH
Parse date string date -d "STRING" date -j -f "FMT" "STRING"
Add 3 days date -d "now + 3 days" date -v+3d
Subtract 2 hours date -d "now - 2 hours" date -v-2H
ISO 8601 date --iso-8601=seconds date -u +"%Y-%m-%dT%H:%M:%SZ"
Specific TZ TZ="Zone" date TZ="Zone" date