vb.net 如何以编程方式创建 .ics 文件?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/4931316/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to create .ics file programmatically?
提问by wallace740
How can I create an icalendar file with minimum data, I try to make it as the following but somethings wrong, when I try to import to my Google calendar, it says Events successfully imported but I cant see those event on my calendar
如何使用最少数据创建 icalendar 文件,我尝试将其设置为以下内容,但出现错误,当我尝试导入到我的 Google 日历时,它说事件已成功导入,但我无法在我的日历上看到这些事件
strResult.Append("BEGIN:VCALENDAR" & vbCrLf)
strResult.Append("VERSION:2.0" & vbCrLf)
strResult.Append("METHOD:PUBLISH" & vbCrLf)
While rst1.Read
strResult.Append("BEGIN:VEVENT" & vbCrLf)
strResult.Append("DTSTART: " & CDate(getLeave_date_start(CStr(rst1.getInteger("inq_id")), g_dom_id)).ToUniversalTime().ToString("yyyyMMddTHHmmssZ") & vbCrLf)
strResult.Append("DTEND: " & CDate(getLeave_date_end(CStr(rst1.getInteger("inq_id")), g_dom_id)).ToUniversalTime().ToString("yyyyMMddTHHmmssZ") & vbCrLf)
strResult.Append("SUMMARY: " & rst1.getString("inq_name") & vbCrLf)
strResult.Append("UID: " & rst1.getInteger("inq_id") & vbCrLf)
strResult.Append("CLASS:PUBLIC" & vbCrLf)
strResult.Append("END:VEVENT" & vbCrLf)
End While
strResult.Append("END:VCALENDAR" & vbCrLf)
WriteCalendar(strResult)
I wrote a function WriteCalendar as follows
我写了一个函数 WriteCalendar 如下
Private Sub WriteCalendar(ByVal data As String)
Dim response As HttpResponse = Page.Response
response.Clear()
response.Buffer = True
response.ContentType = "text/calendar"
response.ContentEncoding = Encoding.UTF8
response.Charset = "utf-8"
response.AddHeader("Content-Disposition", "attachment;filename=""" & "icalendarTest" & ".ics""")
response.Write(data)
response.[End]()
End Sub
I download the file and see my events but when it comes to importing to Google Calendar, it says 6 events imported successfully but I cant see them on my calendar
我下载了文件并查看了我的活动,但在导入到 Google 日历时,显示 6 个活动已成功导入,但我在日历上看不到它们
The output icalendarTest.ics
输出 icalendarTest.ics
BEGIN:VCALENDAR
VERSION:2.0
METHOD:PUBLISH
BEGIN:VEVENT
DTSTART: 20110107T060000Z
DTEND: 20110109T080000Z
SUMMARY: ayin yedisinden dokuzuna
UID: 9
CLASS:PUBLIC
END:VEVENT
BEGIN:VEVENT
DTSTART: 20110119T103000Z
DTEND: 20110119T150000Z
SUMMARY: tek gunluk ondokuz
UID: 10
CLASS:PUBLIC
END:VEVENT
BEGIN:VEVENT
DTSTART: 20110213T080000Z
DTEND: 20110213T160000Z
SUMMARY: Mijn Event
UID: 21
CLASS:PUBLIC
END:VEVENT
BEGIN:VEVENT
DTSTART: 20110301T083000Z
DTEND: 20110302T110000Z
SUMMARY: Mart kapidan baktirir
UID: 26
CLASS:PUBLIC
END:VEVENT
BEGIN:VEVENT
DTSTART: 20110117T080000Z
DTEND: 20110117T120000Z
SUMMARY: Neyse bi oncesi olsun
UID: 27
CLASS:PUBLIC
END:VEVENT
BEGIN:VEVENT
DTSTART: 20110121T130000Z
DTEND: 20110121T180000Z
SUMMARY: ocak 21i
UID: 31
CLASS:PUBLIC
END:VEVENT
END:VCALENDAR
采纳答案by wallace740
I did not include all of the tags in .ics, thats the reason of this fault.
我没有在 .ics 中包含所有标签,这就是这个错误的原因。
I extracted my own calendar from Google Calendar and include the missing data, now it works. DTSTAMP seems required though I find that uncesessary, but fine as long as it works
我从谷歌日历中提取了我自己的日历并包含了缺失的数据,现在它可以工作了。DTSTAMP 似乎是必需的,虽然我觉得那是不必要的,但只要它有效就好
strResult.Append("BEGIN:VCALENDAR" & vbCrLf)
strResult.Append("PRODID:-//Google Inc//Google Calendar 70.9054//EN" & vbCrLf)
strResult.Append("VERSION:2.0" & vbCrLf)
strResult.Append("METHOD:PUBLISH" & vbCrLf)
While rst1.Read
strResult.Append("BEGIN:VEVENT" & vbCrLf)
strResult.Append("DTSTART:" & rst1.getDateTime("hly_startdate").ToUniversalTime().ToString("yyyyMMddTHHmmssZ") & vbCrLf)
strResult.Append("DTEND:" & rst1.getDateTime("hly_enddate").ToUniversalTime().ToString("yyyyMMddTHHmmssZ") & vbCrLf)
strResult.Append("DTSTAMP:" & rst1.getDateTime("hly_date_created").ToUniversalTime().ToString("yyyyMMddTHHmmssZ") & vbCrLf)
strResult.Append("SEQUENCE:0" & vbCrLf)
strResult.Append("STATUS:CONFIRMED" & vbCrLf)
strResult.Append("SUMMARY:" & rst1.getString("hly_name") & vbCrLf)
strResult.Append("UID:" & System.Guid.NewGuid.ToString() & vbCrLf)
strResult.Append("CLASS:PUBLIC" & vbCrLf)
strResult.Append("TRANSP:OPAQUE" & vbCrLf)
strResult.Append("END:VEVENT" & vbCrLf)
End While
strResult.Append("END:VCALENDAR" & vbCrLf)