如何将获取的单元格数据的值读取为日期Google Sheets API


问题内容

我有一个电子表格,其日期格式设置为“ Jan 30”等,但具有实际的日期值。

在此处输入图片说明

我使用python
Google表格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',[])

值给我“ 1月30日”,我想实际读成1/30/2017..我该怎么做?

更新

深入研究电子表格sheets.value.get
http文档
(与此处的python
api客户端方法参考相对应,我了解到可以将valueRenderOptionas设置为UNFORMATTED_VALUE..

但是当我运行时,我得到了这个奇怪的数字Jan 3042765

在此处输入图片说明

这个数字到底是什么格式?我知道这不是unix时间戳b / c转换,返回的日期不合理

更新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)

问题答案:

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

相关:将Google电子表格日期转换为JS Date对象?

参考文献:

h / t山姆·柏林