.ce文件中的System.Date

时间:2014-02-04 22:46:45

标签: c#

我正在附上.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);

1 个答案:

答案 0 :(得分:1)

ICS文件中的日期字符串应采用yyyyMMddTHHmmssZ格式。所以而不是:

"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);

此外,您还没有检查calDatecalTime是否有值,所以我没有看到将它们Nullable<DateTime>做出来的重点。