Unix ã¿ã€ã ã¹ã¿ã³ãã®ã¿ã€ã ãŸãŒã³å€æ: å®è·µã¬ã€ã
ã¿ã€ã ãŸãŒã³ã Unix ã¿ã€ã ã¹ã¿ã³ãã«ãšã£ãŠéèŠãªçç±
Unix ã¿ã€ã ã¹ã¿ã³ãèªäœã¯ã¿ã€ã ãŸãŒã³ã«äŸåããŸãã â æ°å€ 1785292800 ã¯ã©ãã§ãåãç¬éãæå³ããŸããè€éããçããã®ã¯ããã®ç¬éã衚瀺ããã°èšé²ããŸãã¯ããŒã¿åæã®ããã«äººéãèªããããŒã«ã«æå»ã«å€æãããšãã§ãã
åºæ¬åå: åžžã« UTC ã§ä¿åãã衚瀺ã®ããã ãã«å€æããã ãã®ã«ãŒã«ã¯ãã°ã®ã«ããŽãªå šäœãæé€ããããŒã¿ãã¿ã€ã ãŸãŒã³éã§ç§»æ€å¯èœã«ããŸãã
UTC ãšããŒã«ã«æå»: éããçè§£ãã
UTCïŒåå®äžçæïŒ
UTC ã¯äž»èŠãªæå»æšæºã§ãã倿éã®ããã«å€ããããšã¯ãªããå°çäžã®ã©ãã§ãåãã§ããUnix ã¿ã€ã ã¹ã¿ã³ã㯠UTC ã§å®çŸ©ãããŠããŸãã
ããŒã«ã«æå»
ããŒã«ã«æå»ã¯ãç¹å®ã®å°ççé åã«åãããŠèª¿æŽããã UTC ã§ããåºå®ãªãã»ããïŒäžåœæšæºæã® UTC+8 ãªã©ïŒãŸãã¯å¯å€ãªãã»ããïŒæ±éšæéã DST ã§ UTC-5 ãš UTC-4 ãåãæ¿ãããªã©ïŒã§ UTC ãšç°ãªãå ŽåããããŸãã
ãªãã»ããã®åé¡
åã Unix ã¿ã€ã ã¹ã¿ã³ãã§ãã芳枬è ã®å Žæã«ãã£ãŠç°ãªãããŒã«ã«æå»ã«ãªããŸã:
| ã¿ã€ã ã¹ã¿ã³ã | UTC | ãã¥ãŒãšãŒã¯ (EST) | æ±äº¬ (JST) | ãã³ãã³ (BST) | |-----------|-----|----------------|-------------|--------------| | 1785292800 | 2026-07-19 00:00 | 2026-07-18 20:00 | 2026-07-19 09:00 | 2026-07-19 01:00 | | 1785379200 | 2026-07-19 23:59 | 2026-07-19 19:59 | 2026-07-20 08:59 | 2026-07-20 00:59 |
倿éïŒDSTïŒ
DST ãšã¯ïŒ
倿éã¯ãå€ã®éã«å€ã®æããæéãé·ãç¶ãããã«æèšãé²ããæ £è¡ã§ããæèšã¯æ¥ã«ãã¹ããªã³ã°ãã©ã¯ãŒããïŒ1 æé倱ãïŒããç§ã«ããã©ãŒã«ããã¯ãïŒ1 æéåŸãïŒããŸãã
ã¿ã€ã ã¹ã¿ã³ã倿ãžã®åœ±é¿
DST ã¯ãããŒã«ã«æå»ãš UTC ã®éã«å¯å€ãªãã»ãããçã¿åºããŸããããã¯æ¬¡ã®ããšãæå³ããŸã:
- åãããŒã«ã«æå»ã 2 ã€ã®ç°ãªãã¿ã€ã ã¹ã¿ã³ãã«å¯Ÿå¿ããããšãããïŒããã©ãŒã«ããã¯ãé·ç§»äžãåå 1:00 ãšããæå»ã 2 åçºçããŸãïŒ
- ååšããªãããŒã«ã«æå»ãããïŒãã¹ããªã³ã°ãã©ã¯ãŒããé·ç§»äžãããšãã°åå 2:00 ã¯æ±ºããŠçºçããŸãã â æèšã¯çŽæ¥åå 3:00 ã«ãžã£ã³ãããŸãïŒ
äŸ: ææ§ãªæå»
ã¢ã¡ãªã«åè¡åœã®æ±éšæé垯ã§ã¯ã11 æã®ç¬¬ 1 æ¥ææ¥ã®åå 2:00 ã«ãæèšã¯åå 1:00 ã«æ»ããŸããããã¯æ¬¡ã®ããšãæå³ããŸã:
from datetime import datetime, timezone
import pytz
eastern = pytz.timezone("America/New_York")
# First occurrence of 1:00 AM (EDT, UTC-4)
first = eastern.localize(datetime(2026, 11, 1, 1, 0), is_dst=True)
print(first.timestamp())
# Some timestamp value
# Second occurrence of 1:00 AM (EST, UTC-5) = 3600 seconds later!
second = eastern.localize(datetime(2026, 11, 1, 1, 0), is_dst=False)
print(second.timestamp())
# first.timestamp() + 3600
ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãææ§ãªãã©ãŒã«ããã¯æå»ãåžžã«æ
éã«æ±ã£ãŠãã ãããPython ã§ is_dst/ambiguous ãã©ã°ã䜿çšããããä»ã®èšèªã§åçã®ãªãã·ã§ã³ã䜿çšãããšã埮åŠãªãã°ãé²ããŸãã
ã¿ã€ã ãŸãŒã³éã®å€æ
åœç€Ÿã®ãªã³ã©ã€ã³ããŒã«ã䜿çšãã
äžåºŠããã®å€æã«æãç°¡åãªã¢ãããŒãã¯ãè€æ°ã®ã¿ã€ã ãŸãŒã³ã§çµæãåæã«è¡šç€ºããåœç€Ÿã® Unix ã¿ã€ã ã¹ã¿ã³ã倿ããŒã« ã§ãã
Linux ã³ãã³ãã©ã€ã³ã䜿çšãã
# Display timestamp in multiple timezones
TZ="America/New_York" date -d @1785292800
TZ="Europe/London" date -d @1785292800
TZ="Asia/Tokyo" date -d @1785292800
# With custom ISO format
TZ="UTC" date -d @1785292800 +"%Y-%m-%d %H:%M:%S %Z"
# Output: 2026-07-19 00:00:00 UTC
TZ="Asia/Shanghai" date -d @1785292800 +"%Y-%m-%d %H:%M:%S %Z"
# Output: 2026-07-19 08:00:00 CST
Python ã䜿çšãã
from datetime import datetime
from zoneinfo import ZoneInfo # Python 3.9+
ts = 1785292800
# Convert to multiple timezones
timezones = ["America/New_York", "Europe/London", "Asia/Tokyo", "Australia/Sydney"]
for tz_name in timezones:
tz = ZoneInfo(tz_name)
dt = datetime.fromtimestamp(ts, tz=tz)
print(f"{tz_name}: {dt.strftime('%Y-%m-%d %H:%M:%S %Z')}")
JavaScript ã䜿çšãã
const ts = 1785292800;
const date = new Date(ts * 1000);
const timezones = [
"America/New_York",
"Europe/London",
"Asia/Tokyo",
"Australia/Sydney"
];
for (const tz of timezones) {
const str = date.toLocaleString("en-US", {
timeZone: tz,
timeZoneName: "short",
});
console.log(`${tz}: ${str}`);
}
Go ã䜿çšãã
package main
import (
"fmt"
"time"
)
func main() {
t := time.Unix(1785292800, 0)
timezones := []string{
"America/New_York",
"Europe/London",
"Asia/Tokyo",
"Australia/Sydney",
}
for _, tz := range timezones {
loc, _ := time.LoadLocation(tz)
fmt.Printf("%s: %s\n", tz, t.In(loc).Format("2006-01-02 15:04:05"))
}
}
äžè¬çãªã¿ã€ã ãŸãŒã³å€æãã¿ãŒã³
ãµãŒããŒãã°ãããŒã«ã«æå»ã«å€æãã
ãµãŒããŒãã°ã¯éåžžãã¿ã€ã ã¹ã¿ã³ãã UTC ã§èšé²ããŸããåæãããšãã¯ãèªåã®ããŒã«ã«ã¿ã€ã ãŸãŒã³ã«å€æããŸã:
# Read a log file and display timestamps in Pacific time
while IFS= read -r line; do
if [[ $line =~ ^([0-9]+) ]]; then
ts="${BASH_REMATCH[1]}"
TZ="America/Los_Angeles" date -d @"$ts" "+%Y-%m-%d %H:%M:%S"
echo " $line"
fi
done < server.log
ã¿ã€ã ãŸãŒã³éã§ã®ã€ãã³ãã®ã¹ã±ãžã¥ãŒãªã³ã°
ã¿ã€ã ãŸãŒã³éã§ã€ãã³ãæå»ãå ±æãããšãã¯ãåžžã« UTC ã§äŒããããUnix ã¿ã€ã ã¹ã¿ã³ããçŽæ¥å ±æããŸããããã«ããææ§ãããªããªããŸã:
- ã
1785292800ã«äŒè°ãã¯ææ§ãããããŸãã - ãåå 9:00 EST ã«äŒè°ã㯠DST ã®ç§»è¡äžã«ææ§ã«ãªããŸã
- ãåå 9:00 America/New_York ã«äŒè°ãã¯ããè¯ãã§ãããããã§ã DST ã®ç¶æ ãç¥ãå¿ èŠããããŸã
ããŒã¿ããŒã¹ã«ã¿ã€ã ã¹ã¿ã³ããä¿åãã
-- Always store the timestamp itself (timezone-independent)
INSERT INTO events (occurred_at, user_id) VALUES (1785292800, 42);
-- OR store with an explicit UTC timestamp column
INSERT INTO events (occurred_at_utc, user_id)
VALUES ('2026-07-19 00:00:00+00', 42);
ãã¹ããã©ã¯ãã£ã¹ã®ãŸãšã
- UTC ã§ä¿åãã衚瀺ã®ããã«å€æãã â ããŒã«ã«æå»ãããŒã¿ããŒã¹ã«ä¿åããªãã§ãã ãã
- IANA ã¿ã€ã ãŸãŒã³åã䜿çšããïŒäŸ:
America/New_YorkïŒç¥ç§°ïŒESTãPSTïŒã§ã¯ãªã â ç¥ç§°ã¯ææ§ã§ãDST ãèæ ®ããŸãã - DST ãæç€ºçã«æ±ã â ã¿ã€ã ãŸãŒã³å¯Ÿå¿ã©ã€ãã©ãªã䜿çšããæåã§æéãå ç®/æžç®ããªãã§ãã ãã
- åžžã«ã¿ã€ã ãŸãŒã³æ å ±ãæž¡ã â ãŠãŒã¶ãŒããæ¥ä»ãåãåããšãã¯ããªãã»ããã ãã§ãªãã¿ã€ã ãŸãŒã³ãåéããŠãã ãã
- å¢çã®æ¥ä»ããã¹ããã â DST ã®ç§»è¡æ¥ïŒæ¥ãšç§ã®äž¡æ¹ïŒã§å€æããžãã¯ããã¹ãããŠããã°ãæ©æã«çºèŠããŠãã ãã
ã¿ã€ã ãŸãŒã³ããŒã¿ããŒã¹
ã·ã¹ãã ã®ã¿ã€ã ãŸãŒã³ããŒã¿ã¯ãIANA ã¿ã€ã ãŸãŒã³ããŒã¿ããŒã¹ïŒãªã«ãœã³ããŒã¿ããŒã¹ãšãåŒã°ããŸãïŒããååŸãããŸããããã¯ãæ¿åºã DST ã«ãŒã«ã倿Žãããã³ã«å¹Žã«æ°åæŽæ°ãããŸããã·ã¹ãã ãææ°ã®ç¶æ ã«ä¿ã¡ãŸããã:
# Debian / Ubuntu
sudo apt update && sudo apt install tzdata
# macOS
# Automatically updated via software updates
# Verify your database version
zdump -v /etc/localtime | head -1
äž»èŠãªãã¹ãŠã®ã¿ã€ã ãŸãŒã³ã«ããããã°ããã¿ã€ã ãŸãŒã³å¯Ÿå¿ã®å€æã«ã¯ãåœç€Ÿã® Unix ã¿ã€ã ã¹ã¿ã³ã倿ããŒã« ã䜿çšããŠãã ããã