How to create .ics file programmatically?

匿名 (未验证) 提交于 2019-12-03 03:03:02

问题:

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

    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

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

The output 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   

回答1:

I did not include all of the tags in .ics, thats the reason of this fault.

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

    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) 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!