【问题标题】:Google Calendar API datetime format python谷歌日历 API 日期时间格式 python
【发布时间】:2018-04-18 00:32:54
【问题描述】:

我正在尝试使用适用于 python 的 Google 日历 API,并希望更改其输出日期的格式。我试过使用 dateutil 和 strftime,但无法让它工作.....

现在它正在输出 yyyy-mm-dd hh:mm:ss-hh:mm "Event Name"。

我希望它只显示 yyyy-mm-dd 或类似“2018 年 4 月 15 日”的格式。

谢谢你,非常感谢!

"""
Shows basic usage of the Google Calendar API. Creates a Google Calendar API
service object and outputs a list of the next 10 events on the user's calendar.
"""
from __future__ import print_function
from apiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools
import datetime
import time

# Setup the Calendar API
SCOPES = 'https://www.googleapis.com/auth/calendar.readonly'
store = file.Storage('credentials.json')
creds = store.get()
if not creds or creds.invalid:
    flow = client.flow_from_clientsecrets('client_secret.json', SCOPES)
    creds = tools.run_flow(flow, store)
service = build('calendar', 'v3', http=creds.authorize(Http()))

# Call the Calendar API
now = datetime.datetime.utcnow().isoformat() + 'Z' # 'Z' indicates UTC time
print('Getting the upcoming 10 events')
events_result = service.events().list(calendarId='primary', timeMin=now,
                                      maxResults=10, singleEvents=True,
                                      orderBy='startTime').execute()
events = events_result.get('items', [])

outFile = open('sample.txt' , 'w')

if not events:
    print('No upcoming events found.')


for event in events:
    start = event['start'].get('dateTime', event['start'].get('date'))

    print(start, event['summary'])

    outFile.write(str(event['summary']))
    outFile.write('  ')
    outFile.write(start)
    outFile.write('\n')
outFile.close()

【问题讨论】:

标签: python string api datetime google-calendar-api


【解决方案1】:

您可能已经找到了解决此问题的方法,但 another question 将我带到了这个“未回答”的问题。

同样的答案..

您可以同时使用dateutil.parserdatetime.datetime.strftime

from dateutil.parser import parse as dtparse
from datetime import datetime as dt

start = '2018-12-26T10:00:00+01:00'   # Let's say your start value returns this as 'str'
tmfmt = '%d %B, %H:%M %p'             # Gives you date-time in the format '26 December, 10:00 AM' as you mentioned

# now use the dtparse to read your event start time and dt.strftime to format it
stime = dt.strftime(dtparse(start), format=tmfmt)

输出:

Out[23]: '26 December, 10:00 AM'

然后使用以下命令打印事件或将4个outfile.write命令合二为一,写入文件如下:

print(stime, event['summary'])
outFile.write("{}\t{}\n".format(str(event['summary']), stime)

【讨论】:

    【解决方案2】:

    我假设start 变量包含您要打印的datetime 对象。如果是这样,您可以通过调用 strftime 来格式化它(想想:字符串 from 时间)。从日期时间对象返回一个字符串:

    date_format = '%Y-%m-%d'
    print(start.strftime(date_format), event['summary'])
    

    文档(link) 包含一个解释各种格式选项的表格

    【讨论】:

    • 我收到错误:AttributeError: 'unicode' object has no attribute 'strftime' 我必须安装 strftime 吗?
    • 也许 strftime 不起作用,因为我的代码的输出是一个时间范围,而不仅仅是一个特定的日期和时间
    【解决方案3】:

    对于那些正在寻找日期时间格式来将 Python 的日期时间转换为 Google 的 API 格式的人,您可以使用以下方法:

    datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%fZ')
    

    【讨论】:

      猜你喜欢
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 2013-04-26
      • 2020-11-16
      • 1970-01-01
      • 2019-09-08
      • 2017-03-13
      相关资源
      最近更新 更多