【发布时间】:2022-11-10 23:00:15
【问题描述】:
这是一个包含重复事件和非重复事件的 basic.ics 文件
BEGIN:VCALENDAR
PRODID:-//Google Inc//Google Calendar 70.9054//EN
VERSION:2.0
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:GreekMan
X-WR-TIMEZONE:Asia/Nicosia
BEGIN:VTIMEZONE
TZID:Europe/Moscow
X-LIC-LOCATION:Europe/Moscow
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0300
TZNAME:MSK
DTSTART:19700101T000000
END:STANDARD
END:VTIMEZONE
BEGIN:VTIMEZONE
TZID:Asia/Nicosia
X-LIC-LOCATION:Asia/Nicosia
BEGIN:STANDARD
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
TZNAME:EET
DTSTART:19701025T040000
RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU
END:STANDARD
BEGIN:DAYLIGHT
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
TZNAME:EEST
DTSTART:19700329T030000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
DTSTART:20221110T140000Z
DTEND:20221110T143000Z
DTSTAMP:20221110T093950Z
UID:52kaiifeon2cdil0m6ln6m4cf6@google.com
CREATED:20221110T091122Z
LAST-MODIFIED:20221110T091122Z
LOCATION:
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:non recurring event 1600
TRANSP:OPAQUE
END:VEVENT
BEGIN:VEVENT
DTSTART;TZID=Asia/Nicosia:20221110T130000
DTEND;TZID=Asia/Nicosia:20221110T133000
RRULE:FREQ=WEEKLY;BYDAY=TH
DTSTAMP:20221110T093950Z
UID:4ponmapnn5o6bj0fep6kfplcf4@google.com
CREATED:20221110T091051Z
DESCRIPTION:
LAST-MODIFIED:20221110T091101Z
LOCATION:
SEQUENCE:1
STATUS:CONFIRMED
SUMMARY:recurring event 1300
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR
我使用 wget 下载此文件并使用此命令将其转换为表格
awk 'BEGIN{FS=":"}/^DTSTART/{dtstart=$2}/^SUMMARY/{summary=$2}/^END:VEVENT/{print substr(dtstart,7,2)"/"substr(dtstart,5,2)"/"substr(dtstart,1,4),sprintf("%02d",substr(dtstart,10,2)'+2')":"substr(dtstart,12,2),summary}' basic.ics
这是输出。如您所见,重复事件显示的时间错误。
10/11/2022 16:00 non recurring event 1600
10/11/2022 15:00 recurring event 1300
谷歌日历以 UTC+0 显示时间,因此您可以在上面的命令中看到,我为每个事件添加 2 小时以使其成为 UTC+2。
问题是重复事件包括 DTSTART 上的时区,因此不必更正这些事件。
如何修改命令以避免重复事件增加 2 小时?
【问题讨论】:
-
要使用时区,您可能需要对
awk、date等使用非标准扩展......目标操作系统是什么? -
linux debian 11.5
-
您的目的是在
Asia/Nicosia时区显示日期时间吗? -
这是正确的,是的