【问题标题】:Convert Google Sheet date serial value into human readable date将 Google Sheet 日期序列值转换为人类可读的日期
【发布时间】:2018-05-10 12:41:35
【问题描述】:

设置

我正在通过 Google Drive API 阅读 Python 中的 Google Sheet。

我有一个日期值——一个日期序列值,我需要将其转换为人类可读的日期。

我有:

date = 42747

我知道这意味着日期是12-1-2017


问题

有没有一种简单的方法可以将42747 转换为12-1-2017

我见过this question,但它没有回答我的问题。

【问题讨论】:

    标签: python date google-sheets date-conversion


    【解决方案1】:

    这列出了 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: https://stackoverflow.com/a/66738817/
        assert isinstance(num_days, int)
        return _BASE_GSHEET_DATE + datetime.timedelta(num_days)
    
    
    def convert_date_to_gsheet(date: datetime.date, /) -> int:
        # Ref: https://stackoverflow.com/a/66738817/
        assert isinstance(date, datetime.date)
        return (date - _BASE_GSHEET_DATE).days
    
    def convert_datetime_to_gsheet(dt: datetime.datetime, /) -> float:
        # Ref: https://stackoverflow.com/a/66738817/
        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: https://stackoverflow.com/a/66738817/
        assert isinstance(num_days, (float, int))
        return _BASE_GSHEET_DATETIME + datetime.timedelta(num_days)
    

    【讨论】:

      【解决方案2】:

      这可行:

      import datetime
      def convert_xls_datetime(xls_date):
          return (datetime.datetime(1899, 12, 30)
                  + datetime.timedelta(days=xls_date))
      
      print(convert_xls_datetime(42747))
      

      【讨论】:

      • 不错!非常感谢。它实际上给了我2017-01-12 00:00:00,有没有办法阻止它给出时间指示,即只是2017-01-12
      • convert_xls_datetime(42747).date() 会给你日期。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-26
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      • 2012-06-16
      • 1970-01-01
      相关资源
      最近更新 更多