65.9K
CodeProject 正在变化。 阅读更多。
Home

.NET 类,用于创建和维护 vCalendar 信息

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.82/5 (24投票s)

2003年2月7日

CPOL
viewsIcon

319465

downloadIcon

1628

.NET 类,用于创建和维护 vCalendar 信息

Sample Image - vCalendar.gif

引言

我正在将我网站的日历部分移植到 ASP.NET,并遇到了将事件信息导出到 vCalendar 文件的问题,以便将其导入到 Outlook 或其他支持 vCalendar/iCalendar 格式的日历应用程序中。因此,我创建了一个类来封装所有信息的格式化。

Public Class vCalendar
    Public Events As vEvents

    Public Overrides Function ToString() As String
        Dim result As New System.Text.StringBuilder()
        result.AppendFormat("BEGIN:VCALENDAR{0}", _
System.Environment.NewLine) 'The following two lines seem to be required by
'Outlook to get the alarm settings
result.AppendFormat("VERSION:2.0{0}", System.Environment.NewLine) result.AppendFormat("METHOD:PUBLISH{0}", _
System.Environment.NewLine) Dim item As vEvent For Each item In Events result.Append(item.ToString()) Next result.AppendFormat("END:VCALENDAR{0}", _
System.Environment.NewLine) Return result.ToString End Function Public Sub New(ByVal Value As vEvent) Me.Events = New vEvents() Me.Events.Add(Value) End Sub Public Sub New() Me.Events = New vEvents() End Sub Public Class vAlarm Public Trigger As TimeSpan
'Amount of time before event to display alarm Public Action As String
'Action to take to notify user of alarm Public Description As String 'Description of the alarm Public Sub New() Trigger = TimeSpan.FromDays(1) Action = "DISPLAY" Description = "Reminder" End Sub Public Sub New(ByVal SetTrigger As TimeSpan) Trigger = SetTrigger Action = "DISPLAY" Description = "Reminder" End Sub Public Sub New(ByVal SetTrigger As TimeSpan, _
ByVal SetAction As String, ByVal SetDescription As String) Trigger = SetTrigger Action = SetAction Description = SetDescription End Sub Public Overrides Function ToString() As String Dim result As New System.Text.StringBuilder() result.AppendFormat("BEGIN:VALARM{0}", _
System.Environment.NewLine) result.AppendFormat("TRIGGER:P{0}DT{1}H{2}M{3}", _
Trigger.Days, Trigger.Hours, Trigger.Minutes, _
System.Environment.NewLine) result.AppendFormat("ACTION:{0}{1}", Action, _
System.Environment.NewLine) result.AppendFormat("DESCRIPTION:{0}{1}", _
Description, System.Environment.NewLine) result.AppendFormat("END:VALARM{0}", _
System.Environment.NewLine) Return result.ToString End Function End Class Public Class vEvent Public UID As String 'Unique identifier for the event Public DTStart As Date 'Start date of event.
'Will be automatically converted to GMT
Public DTEnd As Date 'End date of event.
'Will be automatically converted to GMT
Public DTStamp As Date 'Timestamp.
'Will be automatically converted to GMT
Public Summary As String 'Summary/Subject of event Public Organizer As String 'Can be mailto: url or just a name Public Location As String Public Description As String Public URL As String Public Alarms As vAlarms 'Alarms needed for this event Public Overrides Function ToString() As String Dim result As New System.Text.StringBuilder() result.AppendFormat("BEGIN:VEVENT{0}", _
System.Environment.NewLine) result.AppendFormat("UID:{0}{1}", UID, _
System.Environment.NewLine) result.AppendFormat("SUMMARY:{0}{1}", _
Summary, System.Environment.NewLine) result.AppendFormat("ORGANIZER:{0}{1}", Organizer, _
System.Environment.NewLine) result.AppendFormat("LOCATION:{0}{1}", Location, _
System.Environment.NewLine) result.AppendFormat("DTSTART:{0}{1}", _
DTStart.ToUniversalTime.ToString("yyyyMMdd\THHmmss\Z"), _
System.Environment.NewLine) result.AppendFormat("DTEND:{0}{1}", _
DTEnd.ToUniversalTime.ToString("yyyyMMdd\THHmmss\Z"), _
System.Environment.NewLine) result.AppendFormat("DTSTAMP:{0}{1}", _
Now.ToUniversalTime.ToString("yyyyMMdd\THHmmss\Z"), _
System.Environment.NewLine) result.AppendFormat("DESCRIPTION:{0}{1}", Description, _
System.Environment.NewLine) If URL.Length > 0 Then result.AppendFormat("URL:{0}{1}", _
URL, System.Environment.NewLine) Dim item As vAlarm For Each item In Alarms result.Append(item.ToString()) Next result.AppendFormat("END:VEVENT{0}", _
System.Environment.NewLine) Return result.ToString End Function Public Sub New() Me.Alarms = New vAlarms() End Sub End Class Public Class vAlarms ' The first thing to do when building a CollectionBase
' class is to inherit from System.Collections.CollectionBase
Inherits System.Collections.CollectionBase Public Overloads Function Add(ByVal Value As vAlarm) As vAlarm ' After you inherit the CollectionBase class, you
' can access an intrinsic object
' called InnerList that represents your collection.
' InnerList is of type ArrayList.
Me.InnerList.Add(Value) Return Value End Function Public Overloads Function Item(ByVal Index As Integer) As vAlarm ' To retrieve an item from the InnerList,
' pass the index of that item to the .Item property.
Return CType(Me.InnerList.Item(Index), vAlarm) End Function Public Overloads Sub Remove(ByVal Index As Integer) ' This Remove expects an index. Dim cust As vAlarm cust = CType(Me.InnerList.Item(Index), vAlarm) If Not cust Is Nothing Then Me.InnerList.Remove(cust) End If End Sub End Class Public Class vEvents ' The first thing to do when building a CollectionBase
' class is to inherit from System.Collections.CollectionBase
Inherits System.Collections.CollectionBase Public Overloads Function Add(ByVal Value As vEvent) As vEvent ' After you inherit the CollectionBase class,
' you can access an intrinsic object
' called InnerList that represents your collection.
' InnerList is of type ArrayList.
Me.InnerList.Add(Value) Return Value End Function Public Overloads Function Item(ByVal Index As Integer) As vEvent ' To retrieve an item from the InnerList,
' pass the index of that item to the .Item property.
Return CType(Me.InnerList.Item(Index), vEvent) End Function Public Overloads Sub Remove(ByVal Index As Integer) ' This Remove expects an index. Dim cust As vEvent cust = CType(Me.InnerList.Item(Index), vEvent) If Not cust Is Nothing Then Me.InnerList.Remove(cust) End If End Sub End Class End Class

我计划在发现更多属性时添加它们,但目前 Outlook 支持的基本上就是这些属性了。我也想听取大家对我的设计的反馈意见。

vCalendar 规范

以下是一些关于 vCalendar 规范的链接(感谢 Tommi)

© . All rights reserved.