将 Google Sheet 日期序列值转换为人类可读的日期
Convert Google Sheet date serial value into human readable date
设置
我正在通过 Google Drive API.
在 Python 中阅读 Google Sheet
我有一个日期值 – 一个日期序列值,我需要将其转换为人类可读的日期。
我有:
date = 42747
我知道这意味着日期是 12-1-2017
。
问题
有没有简单的方法可以将 42747
转换为 12-1-2017
?
我看过 ,但它没有回答我的问题。
这可行:
import datetime
def convert_xls_datetime(xls_date):
return (datetime.datetime(1899, 12, 30)
+ datetime.timedelta(days=xls_date))
print(convert_xls_datetime(42747))
这列出了 date
和 datetime
的单独函数。
import datetime
from typing import Union
_BASE_DATE = datetime.date(1899, 12, 30)
_BASE_DATETIME = datetime.datetime(_BASE_DATE.year, _BASE_DATE.month, _BASE_DATE.day)
def convert_date_from_gsheet(num_days: int, /) -> datetime.date:
# Ref:
assert isinstance(num_days, int)
return _BASE_GSHEET_DATE + datetime.timedelta(num_days)
def convert_date_to_gsheet(date: datetime.date, /) -> int:
# Ref:
assert isinstance(date, datetime.date)
return (date - _BASE_GSHEET_DATE).days
def convert_datetime_to_gsheet(dt: datetime.datetime, /) -> float:
# Ref:
assert isinstance(dt, datetime.datetime)
delta = dt - _BASE_GSHEET_DATETIME
return delta.days + delta.seconds / 86_400.0 # Note: datetime.timedelta(days=1).total_seconds() == 86_400.0
def convert_datetime_from_gsheet(num_days: Union[float, int], /) -> datetime.datetime:
# Ref:
assert isinstance(num_days, (float, int))
return _BASE_GSHEET_DATETIME + datetime.timedelta(num_days)
设置
我正在通过 Google Drive API.
在 Python 中阅读 Google Sheet我有一个日期值 – 一个日期序列值,我需要将其转换为人类可读的日期。
我有:
date = 42747
我知道这意味着日期是 12-1-2017
。
问题
有没有简单的方法可以将 42747
转换为 12-1-2017
?
我看过
这可行:
import datetime
def convert_xls_datetime(xls_date):
return (datetime.datetime(1899, 12, 30)
+ datetime.timedelta(days=xls_date))
print(convert_xls_datetime(42747))
这列出了 date
和 datetime
的单独函数。
import datetime
from typing import Union
_BASE_DATE = datetime.date(1899, 12, 30)
_BASE_DATETIME = datetime.datetime(_BASE_DATE.year, _BASE_DATE.month, _BASE_DATE.day)
def convert_date_from_gsheet(num_days: int, /) -> datetime.date:
# Ref:
assert isinstance(num_days, int)
return _BASE_GSHEET_DATE + datetime.timedelta(num_days)
def convert_date_to_gsheet(date: datetime.date, /) -> int:
# Ref:
assert isinstance(date, datetime.date)
return (date - _BASE_GSHEET_DATE).days
def convert_datetime_to_gsheet(dt: datetime.datetime, /) -> float:
# Ref:
assert isinstance(dt, datetime.datetime)
delta = dt - _BASE_GSHEET_DATETIME
return delta.days + delta.seconds / 86_400.0 # Note: datetime.timedelta(days=1).total_seconds() == 86_400.0
def convert_datetime_from_gsheet(num_days: Union[float, int], /) -> datetime.datetime:
# Ref:
assert isinstance(num_days, (float, int))
return _BASE_GSHEET_DATETIME + datetime.timedelta(num_days)