mirror of
https://github.com/elliotnunn/ToolboxToolbox.git
synced 2024-12-26 12:29:19 +00:00
Create macdate.py
This commit is contained in:
parent
f4c4bb3564
commit
2db6c57556
63
macdate.py
Executable file
63
macdate.py
Executable file
@ -0,0 +1,63 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import sys
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
|
||||
# Copied from machfs MakeHFS
|
||||
def hfsdat(x):
|
||||
if x.lower() == "now":
|
||||
x = datetime.now().isoformat()
|
||||
|
||||
if len(x) == 8 and all(c in "0123456789ABCDEF" for c in x.upper()):
|
||||
try:
|
||||
return int(x, base=16)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
epoch = "19040101000000" # ISO8601 with the non-numerics stripped
|
||||
|
||||
# strip non-numerics and pad out using the epoch (cheeky)
|
||||
stripped = "".join(c for c in x if c in "0123456789")
|
||||
stripped = stripped[: len(epoch)] + epoch[len(stripped) :]
|
||||
|
||||
tformat = "%Y%m%d%H%M%S"
|
||||
|
||||
delta = datetime.strptime(stripped, tformat) - datetime.strptime(epoch, tformat)
|
||||
delta = int(delta.total_seconds())
|
||||
|
||||
if not 0 <= delta <= 0xFFFFFFFF:
|
||||
print("Warning: moving %r into the legacy MacOS date range (1904-2040)" % x)
|
||||
|
||||
delta = min(delta, 0xFFFFFFFF)
|
||||
delta = max(delta, 0)
|
||||
|
||||
return delta
|
||||
|
||||
|
||||
# Copied from ExtractBinDates.py
|
||||
def macdatestr(srcint):
|
||||
dt = datetime(1904, 1, 1) + timedelta(seconds=srcint)
|
||||
st = dt.isoformat()
|
||||
st = st.replace("T", " ")
|
||||
return st
|
||||
|
||||
|
||||
def secs2date(secs):
|
||||
print(f"${secs:08x} = {macdatestr(secs)}")
|
||||
|
||||
|
||||
def date2secs(date):
|
||||
secs = hfsdat(date)
|
||||
print(f"{macdatestr(secs)} = ${secs:08x}")
|
||||
|
||||
|
||||
for a in sys.argv[1:]:
|
||||
if a.startswith("$"):
|
||||
secs = int(a[1:], 16)
|
||||
secs2date(secs)
|
||||
elif a.startswith("0x"):
|
||||
secs = int(a[2:], 16)
|
||||
secs2date(secs)
|
||||
else:
|
||||
date2secs(a)
|
Loading…
Reference in New Issue
Block a user