- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 vobject 在 Django 中创建一个 ical 事件。我在使用较低级别的代码时遇到问题。看起来 ical 正在尝试使用 obj.add(TimezoneComponent(tzinfo=getTzid(tzid))) 获取时区。但后来我从 pytz 得到了 raise NonExistentTimeError(dt)
。有什么建议吗?当我使用变量 start1 中的 print 语句查看时,年、月、日显示正确。
File "/home/git/chrono/chrono/requests_app/views.py", line 110, in form_valid
ics_form = create_ics(data)
File "/home/git/chrono/chrono/requests_app/views.py", line 126, in create_ics
response = HttpResponse(cal.serialize(), content_type='text/calendar')
File "/home/one/.virtualenvs/chronos/local/lib/python2.7/site-packages/vobject/base.py", line 186, in serialize
return behavior.serialize(self, buf, lineLength, validate)
File "/home/one/.virtualenvs/chronos/local/lib/python2.7/site-packages/vobject/behavior.py", line 147, in serialize
cls.generateImplicitParameters(obj)
File "/home/one/.virtualenvs/chronos/local/lib/python2.7/site-packages/vobject/icalendar.py", line 853, in generateImplicitParameters
obj.add(TimezoneComponent(tzinfo=getTzid(tzid)))
File "/home/one/.virtualenvs/chronos/local/lib/python2.7/site-packages/vobject/icalendar.py", line 75, in __init__
self.tzinfo = tzinfo
File "/home/one/.virtualenvs/chronos/local/lib/python2.7/site-packages/vobject/base.py", line 468, in __setattr__
prop.fset(self, value)
File "/home/one/.virtualenvs/chronos/local/lib/python2.7/site-packages/vobject/icalendar.py", line 145, in settzinfo
transition = getTransition(transitionTo, year, tzinfo)
File "/home/one/.virtualenvs/chronos/local/lib/python2.7/site-packages/vobject/icalendar.py", line 1856, in getTransition
uncorrected = firstTransition(generateDates(year, month, day), test)
File "/home/one/.virtualenvs/chronos/local/lib/python2.7/site-packages/vobject/icalendar.py", line 1816, in firstTransition
if not test(dt):
File "/home/one/.virtualenvs/chronos/local/lib/python2.7/site-packages/vobject/icalendar.py", line 1843, in test
def test(dt): return tzinfo.dst(dt) != zeroDelta
File "/home/one/.virtualenvs/chronos/local/lib/python2.7/site-packages/pytz/tzinfo.py", line 445, in dst
dt = self.localize(dt, is_dst)
File "/home/one/.virtualenvs/chronos/local/lib/python2.7/site-packages/pytz/tzinfo.py", line 327, in localize
raise NonExistentTimeError(dt)
NonExistentTimeError: 2000-04-02 02:00:00
def create_ics(data):
start1 = data['date_due']
print start1.day
start2 = datetime.datetime(start1.year, start1.month, start1.day)
start3 = data['action']
cal = vobject.iCalendar()
cal.add('method').value = 'PUBLISH'
vevent = cal.add('vevent')
vevent.add('dtstart').value = start1
vevent.add('dtend').value = start2
vevent.add('dtstamp').value = datetime.datetime.now()
vevent.add('summary').value = data['action'].name
response = HttpResponse(cal.serialize(), content_type='text/calendar')
response['Filename'] = 'filename.ics'
response['Content-Disposition'] = 'attachment; filename=filename.ics'
return response
来自模型,日期时间字段:
date_due = models.DateTimeField()
更新:
发现我必须放置:
>>> utc = vobject.icalendar.utc
>>> start = cal.vevent.add('dtstart')
>>> start.value = datetime.datetime(2006, 2, 16, tzinfo = utc)
进入其中,效果很好。
最佳答案
简短回答: vobject 与 pytz 不兼容(从 0.9.2 开始)。因此,在尝试序列化 vobject iCalendar 中的每个日期时间之前,请确保已使用 .astimezone(pytz.utc)
之类的内容将其转换为 UTC。
(这是每个 dtstart、dtend、dtstamp、created、last-modified,也许还有一些我忘记的其他 vevent 字段。)
长答案: vobject 尝试对非 UTC 日期时间做正确的事情,但在使用 pytz 时遇到了麻烦。 “正确的事情”来自RFC 5545其中指定 iCalendar:
使用 DATE-TIME Form #3 表示日期时间“带有本地时间和时区引用的日期”。这可能类似于 DTSTART;TZID=America/New_York:20160714T133000
- 请注意您的事件时区的 TZID。
添加VTIMEZONE阻止您的 iCalendar 获取事件中使用的每个唯一 TZID。这是该时区的完整定义:如何针对可能出现的任何日期时间计算该时区相对于 UTC 的偏移量,包括夏令时规则。 (RFC 5545 doesn't specify 任何特定的时区名称,因此您必须在 iCalendar 本身中包含时区定义。vobject 自动为您完成此操作。)
要弄清楚时区转换规则,vobject searches through "all time" (默认年份 2000-2030),查找时区相对 UTC 偏移量的变化。这就是问题所在,因为 vobject 代码不处理 pytz 的无效时间错误。
2000 年 4 月 2 日凌晨 2:00 是 2000 年至 2030 年之间的第一次 DST 转换,这就是您在该时间收到错误的原因(即使您没有在自己的代码中的任何地方使用它)。
选项:
date
而不是datetime
。日期没有时区,因此这些都不适用。 (vobject 可以很好地处理日期。)日期时间
转换为 UTC 格式的感知日期时间。 UTC 不需要 VTIMEZONE 定义。from dateutil import tz; ... tzinfo=tz.gettz('美国/洛杉矶')
.由于 dateutil 是 vobject 依赖项,我认为这是 vobject 的 VTIMEZONE 生成器所针对的格式。 (但尚未进行广泛测试。此外,gettz 需要在您的计算机上安装 tzdb 文件,因此不完全可移植。)关于python - Django ical 与 pytz 的 Vobject 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21128695/
我有一个包含 iCal 事件信息的文件 (/test.txt)。 Friday, May 6, 2011 4:00:00 PM 05/08/2011 11:20:00 PM summary locat
我正在尝试反序列化 iCal 文件,然后将集合映射到自定义 POCO。问题是我不确定属性存储在哪里。 这是反序列化方法 public static IICalendarCollection Deser
我正在尝试在收到通知后立即从 iCal 中删除事件。仅当 iCal 在后台时,事件才会被删除。如果在关闭 iCal 后发送相同的通知,则事件不会被删除。我正在尝试在 MyCalendar.m 中使用此
我正在使用 DDay.iCal 创建 iCal 源.它有效,但我不知道如何设置提要的时区。这是基本代码: iCalendar iCal = new iCalendar(); // (); evt.St
您好,我正在从 DDay.ical 迁移到 Ical.Net nuget pacakages,但我被困在以下代码中,该代码在 DDay.Ical 日历中添加了时区,请帮忙 上一个代码: List ls
我正在编写一个 Mac 应用程序。在这个应用程序中,我想让用户将一些元素变成日历事件。我希望用户能够将元素拖到 iCal 中,最好也拖到 BusyCal 中。但我不知道在拖动粘贴板上放什么。 我希望能
问题 一些重复发生的事件并没有真正在某个时候结束(比如俱乐部 session ?),取决于其他条件(比如假期)。但是,每年都需要手动添加这些异常(exception)情况,因为日期可能不同。 研究 我
我试图了解 iCal feed 和 iCalendar 客户端如何处理过去和 future 的大量事件。有没有什么方法可以让 iCalendar 客户端将日期范围传达给 iCalendar 提要,以便
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我正在尝试制作一个在互联网上找到的脚本来处理我的 ics 文件,以便我可以将其添加到我的项目中。 如果我从 ics 文件中删除时区部分,该脚本可以正常工作。但因为该文件将从互联网上动态获取,所以我无法
我正在处理一个现有的 ical 文件。我不确定是谁创建的,我想在联系他们之前更加熟悉 ical - 这样我就可以进行明智的对话。 谁能告诉我一个很好的 iCal 初学者教程? 到目前为止,我发现的大部
我只能找到获得 ISO 8601 周的算法(周从星期一开始)。 然而,iCal规范说 A week is defined as a seven day period, starting on the
也许是个愚蠢的问题,但我想知道 iCal 客户端如何查询远程日历。 我刚刚创建了一个生成 iCal 文件的小型 Web 服务。这个文件被 Google Calendar 和 Lightning(新 S
我目前正在用 php 编写一个 .ics 文件。我想知道 VEVENT 是否总是需要有一个结束日期? 比如……这是允许的吗? BEGIN:VEVENT UID:d3f760e29fa3f482199f
我编写了一个脚本来根据我数据库中的事件生成一个 iCal 日历。这是一个示例输出: BEGIN:VCALENDAR VERSION:2.0 PRODID:-//hacksw/handcal//NONS
我正在尝试编写一个 AppleScript 来查询 iCal 并在任何日历中查找给定日期的所有事件。 我首先编写了一个简单的脚本,它对给定日历中的每个事件执行一些简单的操作: tell applica
我正在我的应用程序中设置提醒。我已使用 EKEvent 将自定义事件添加到 iCal。现在,当我从 iCal 检索事件时,我会获取当天发生的所有事件。有没有办法仅获取/检索通过我的应用程序添加的事件,
iCal 附件能否在 description 属性中包含 HTML?如果是这样,有什么限制? 最佳答案 经过一些研究和测试。答案是否定的。意思是:你可以把它扔进去,但你不应该。 RFC 并没有严格禁止
我正在尝试弄清楚如何在 iCal 文件的“描述”部分中对换行符进行编码,以便它们能够正确导入到 Outlook、Google 日历和 Apple 日历中。 我继承的原始代码使用“=0D=0A”和引用打
首先我看过这个问题here和 here这对解决我的问题没有帮助: 我正在使用此处稍微修改过的 ics.js 代码 github link var ics = function() { 'use str
我是一名优秀的程序员,十分优秀!