我將諸如此類的檔案名傳遞abcef-1591282803到此函式中,并且該函式運行良好:
def parse_unixtimestamp(filename):
ts = re.findall(r'\d{10}', filename)[0]
return ts
但是,然后我修改了這個函式,所以當時間戳是 13 位而不是 10 位時它也可以作業。 file20-name-1591282803734
def parse_unixtimestamp(filename):
ts = re.findall(r'\d{13}|\d{10}', filename)[0]
return ts
直到這里才拋出錯誤。但是在 13 位數字的情況下,我得到這樣的 ts 值1591282803734。現在,當我將此值傳遞給此函式時year:
def get_dateparts(in_unixtimestamp):
dt_object = datetime.fromtimestamp(int(in_unixtimestamp))
date_string = dt_object.strftime("%Y-%m-%d")
year_string = dt_object.strftime("%Y")
month_string = dt_object.strftime("%m")
day_string = dt_object.strftime("%d")
logger.info(f'year_string: {year_string}')
result = {"date_string": date_string, "year_string": year_string, "month_string": month_string,
"day_string": day_string}
return result
我收到一個錯誤:
year 52395 is out of range
當 unixtimestamp 傳入parse_unixtimestampIs only 10 位時,我不會收到此錯誤。如何修改此函式以使其在兩種情況下都有效?
uj5u.com熱心網友回復:
datetime.fromtimestamp要求您以秒為單位提供時間。如果您的字串有 13 位數字而不是 9 位(即毫秒),您應該使用:
>>> datetime.fromtimestamp(1591282803734/1000)
datetime.datetime(2020, 6, 4, 11, 0, 3, 734000)
要在您的函式中執行此操作,您可以在呼叫之前檢查時間戳的長度datetime.fromtimestamp。更改您的功能如下:
def get_dateparts(in_unixtimestamp):
if len(in_unixtimestamp) == 13:
dt_object = datetime.fromtimestamp(int(in_unixtimestamp)/1000)
else:
dt_object = datetime.fromtimestamp(int(in_unixtimestamp))
date_string = dt_object.strftime("%Y-%m-%d")
year_string = dt_object.strftime("%Y")
month_string = dt_object.strftime("%m")
day_string = dt_object.strftime("%d")
logger.info(f'year_string: {year_string}')
result = {"date_string": date_string,
"year_string": year_string,
"month_string": month_string,
"day_string": day_string}
return result
>>> get_dateparts(parse_unixtimestamp("abcef-1591282803"))
{'date_string': '2020-06-04',
'year_string': '2020',
'month_string': '06',
'day_string': '04'}
>>> get_dateparts(parse_unixtimestamp("file20-name-1591282803734"))
{'date_string': '2020-06-04',
'year_string': '2020',
'month_string': '06',
'day_string': '04'}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/355490.html
下一篇:檢索日期格式錯誤的資料-雪花
