C# .ics文件中的System.Date

C# .ics文件中的System.Date,c#,C#,我正在附加一个.ics文件以及发送给用户的电子邮件。除了日期和时间外,它工作正常。目前,当我双击附加的.ics文件时,我会得到系统日期和时间。我无法将从数据库获取的自己的日期列值添加到日历中。非常感谢你的帮助。 以下是.ics文件的内容: string calLocation = eventRecordAfterInsert.location; string calSubject = eventRecordAfterInsert.eventName

我正在附加一个.ics文件以及发送给用户的电子邮件。除了日期和时间外,它工作正常。目前,当我双击附加的.ics文件时,我会得到系统日期和时间。我无法将从数据库获取的自己的日期列值添加到日历中。非常感谢你的帮助。 以下是.ics文件的内容:

            string calLocation = eventRecordAfterInsert.location;
            string calSubject = eventRecordAfterInsert.eventName;
            string calDescription = "Event Schedule Description";
            DateTime? calDate = eventRecordAfterInsert.eventDt;
            DateTime? calTime = Convert.ToDateTime(row.Cells[11].Text);
            DateTime calEventDateAndTime = calDate.Value.Date + calTime.Value.TimeOfDay;
String[] contents = { "BEGIN:VCALENDAR",
                                    "VERSION:2.0",
                                    "PRODID:-//flo Inc.//FloSoft//EN",
                                    "METHOD:PUBLISH",
                                    "BEGIN:VEVENT",
                                    //"UID:{0}",
                                    "DTSTAMP:" + calEventDateAndTime,
                                    "DTEND:" + calEventDateAndTime,
                                    "Location:"+ calLocation, 
                                    "Description;Encoding=QUOTED-PRINTABLE:" + calSubject,
                                    "Summary:" + calDescription, 
                                    "Priority:3",
                                    "BEGIN:VALARM",
                                    "TRIGGER:-PT15M",
                                    "ACTION:DISPLAY",
                                    "DESCRIPTION:Reminder",
                                    "END:VALARM",
                                    "END:VEVENT", "END:VCALENDAR" };
                System.IO.File.WriteAllLines(Server.MapPath("EventDetails.ics"), contents);

ICS文件中的日期字符串应采用
yyyymmddthhmmsz
格式。因此,不是:

"DTSTAMP:" + calEventDateAndTime,
你应该做:

"DTSTAMP:" + calEventDateAndTime.ToUniversalTime().ToString("yyyyMMddTHHmmssZ"),
或者,由于要重复该值,请在将其追加到字符串数组之前将其移出到另一个变量中

您还试图将一个
DateTime
的时间组件添加到另一个带有日期组件的
DateTime
,但我认为它不会按您希望的方式工作。您必须重新考虑该方法,可能需要解析单元格外的时间组件,并将其添加到日期:

DateTime? calDate = eventRecordAfterInsert.eventDt;
TimeSpan calTime = TimeSpan.Parse(row.Cells[11].Text);
DateTime calEventDateAndTime = calDate.Value.Date.Add(calTime);
或者将两个
DateTime
结构组合成第三个新结构:

DateTime calEventDateAndTime = new DateTime(calDate.Value.Year, 
                                            calDate.Value.Month, 
                                            calDate.Value.Day, 
                                            calTime.Value.Hour, 
                                            calTime.Value.Minute, 
                                            calTime.Value.Second);

另外,您没有检查
calDate
calTime
是否有值,因此,我不认为将它们设为可空的有什么意义。

那么,所有这些
cal*
变量都定义在哪里?@Cory:编辑了上述代码,因为我在calEventDateAndTime中添加了日期和时间,所以不允许我转换为system.datetime。如果我错了,请更正。@user3254765:您必须创建一个新的
DateTime
,类似于:
DateTime combined=newdatetime(calDate.Value.Year,calDate.Value.Month,calDate.Value.Day,calTime.Value.Hour,calTime.Value.Minute,calTime.Value.Second)
然后使用组合的
代替上面的
CaleventDate和time
:日期现在在日历中与开始时间一起工作。如何将30分钟添加到结束时间?@user3254765:
calEventDateAndTime.AddMinutes(30).ToUniversalTime().ToString(“yyyymmddthhmmsz”),