2011-02-08 52 views
3

如何使用最少的数据创建一个icalendar文件,我尝试使其成为以下但有些错误,当我尝试导入到我的Google日历时,它说事件已成功导入,但我无法在日历上看到这些事件如何以编程方式创建.ics文件?

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) 

我写了一个函数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 

我下载的文件,看到我的事件,但是,当涉及到导入到谷歌日历,上面写着6个事件成功导入,但我不能上看到他们我的日历

输出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

一注:UID应该是在整个宇宙中(考虑到所有的星系)是唯一的。一个整数对于这个 – 2011-02-08 09:23:32

+0

不是一个很好的选择,这可能是不显示我的事件的原因吗? – wallace740 2011-02-08 10:22:56

回答

3

我并没有包括所有的.ics中的标签,那该故障的原因。

我从Google日历中提取了我自己的日历,并包含缺失的数据,现在可以使用。 DTSTAMP似乎需要,虽然我发现uncesessary,但罚款,只要它的作品

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)