将 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))

这列出了 datedatetime 的单独函数。

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)