Spaces:
Running
Running
"""fontTools.misc.timeTools.py -- tools for working with OpenType timestamps. | |
""" | |
import os | |
import time | |
from datetime import datetime, timezone | |
import calendar | |
epoch_diff = calendar.timegm((1904, 1, 1, 0, 0, 0, 0, 0, 0)) | |
DAYNAMES = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"] | |
MONTHNAMES = [ | |
None, | |
"Jan", | |
"Feb", | |
"Mar", | |
"Apr", | |
"May", | |
"Jun", | |
"Jul", | |
"Aug", | |
"Sep", | |
"Oct", | |
"Nov", | |
"Dec", | |
] | |
def asctime(t=None): | |
""" | |
Convert a tuple or struct_time representing a time as returned by gmtime() | |
or localtime() to a 24-character string of the following form: | |
>>> asctime(time.gmtime(0)) | |
'Thu Jan 1 00:00:00 1970' | |
If t is not provided, the current time as returned by localtime() is used. | |
Locale information is not used by asctime(). | |
This is meant to normalise the output of the built-in time.asctime() across | |
different platforms and Python versions. | |
In Python 3.x, the day of the month is right-justified, whereas on Windows | |
Python 2.7 it is padded with zeros. | |
See https://github.com/fonttools/fonttools/issues/455 | |
""" | |
if t is None: | |
t = time.localtime() | |
s = "%s %s %2s %s" % ( | |
DAYNAMES[t.tm_wday], | |
MONTHNAMES[t.tm_mon], | |
t.tm_mday, | |
time.strftime("%H:%M:%S %Y", t), | |
) | |
return s | |
def timestampToString(value): | |
return asctime(time.gmtime(max(0, value + epoch_diff))) | |
def timestampFromString(value): | |
wkday, mnth = value[:7].split() | |
t = datetime.strptime(value[7:], " %d %H:%M:%S %Y") | |
t = t.replace(month=MONTHNAMES.index(mnth), tzinfo=timezone.utc) | |
wkday_idx = DAYNAMES.index(wkday) | |
assert t.weekday() == wkday_idx, '"' + value + '" has inconsistent weekday' | |
return int(t.timestamp()) - epoch_diff | |
def timestampNow(): | |
# https://reproducible-builds.org/specs/source-date-epoch/ | |
source_date_epoch = os.environ.get("SOURCE_DATE_EPOCH") | |
if source_date_epoch is not None: | |
return int(source_date_epoch) - epoch_diff | |
return int(time.time() - epoch_diff) | |
def timestampSinceEpoch(value): | |
return int(value - epoch_diff) | |
if __name__ == "__main__": | |
import sys | |
import doctest | |
sys.exit(doctest.testmod().failed) | |