如何将获取的单元格数据的值读取为日期 google 工作表 API

How to read value of fetched cell data as date google sheets API

我有一个电子表格,日期格式为 "Jan 30" 等,但有实际日期值。

我像这样使用 python google Sheets API 获取数据:

def get_spreadsheet_sheets(service, spreadsheetId):
    spreadsheet = service.spreadsheets().get(spreadsheetId=spreadsheetId).execute()
    dateCell = "C15"
    for sheet in spreadsheet['sheets']:
        sheetTitle = sheet['properties']['title']
        rangeName = "%s!%s" % (sheetTitle, dateCell)
        result = service.spreadsheets().values().get(
            spreadsheetId=spreadsheetId, range=rangeName).execute()
        values = result.get('values',[])

values 给了我 'Jan 30',我想把它读成 1/30/2017..我该怎么做?

更新

深入研究 spreadsheets.value.get http documentation (which corresponds to the python api client method references here 我了解到我可以将 valueRenderOption 的选项设为 UNFORMATTED_VALUE..

然而,当我 运行 得到 Jan 30 这个奇怪的数字时: 42765

这个数字到底是什么格式?我知道这不是 unix 时间戳 b/c 将其转换为 returns 无意义的日期

更新 2:解决方法

此代码有效,但使用 python 日期格式(它还假定年份是当前年份..但显然情况并非总是如此):

def get_spreadsheet_sheets(service, spreadsheetId):
    spreadsheet = service.spreadsheets().get(spreadsheetId=spreadsheetId).execute()
    dateCell = "C15"
    for sheet in spreadsheet['sheets']:
        sheetTitle = sheet['properties']['title']
        rangeName = "%s!%s" % (sheetTitle, dateCell)
        result = service.spreadsheets().values().get(
            spreadsheetId=spreadsheetId, range=rangeName).execute()
        values = result.get('values',[])
        dateStr = "%s %s" % (values[0][0], datetime.date.today().year)
        cellDate = datetime.datetime.strptime(dateStr, '%b %d %Y')
        print(cellDate)

“奇怪的数字”被称为“序列化 date-time 值”或“日期序列值”。显示为日期 (yyyy-mm-dd) 的 0 值是 1899-12-30。整数是天,小数是小时、分钟等

相关:Converting Google spreadsheet date into a JS Date object?

参考文献:

  • TO_DATE、Google 电子表格 built-in 函数
  • DateTime Serial Numbers,来自 Google 表格的文章部分 > API v4 指南(引用的部分已删除,它可能在archive.org)
  • Date and Number Formats,来自 Google 表格的文章 > API v4 指南。
  • ,堆栈溢出问答

h/t Sam Berlin