我使用C#代码生成.ics文件,将我的事件添加到outlook calander。
使用以下代码生成.ics文件。 但我在这里遇到的问题是根据时区设置开始/结束时间。例如,我有.ics文件的新加坡标准时间开始/结束时间。我希望如果有人在新加坡打开文件,那么它应该显示新加坡的时间,如果有人在印度打开它,那么它应该显示印度时间。喜欢2012-04-20 13:00这次在印度将是10:30Am所以.ics文件显示节目10:30作为开始时间如果.ics文件在印度被选中。
我希望开始和结束时间应该根据系统的时区。所以下面的代码有什么问题,它不起作用。
请帮助。
代码:
DateTime StartTime = DateTime.Parse("2012-04-20 13:00:00.000Z");//Singapore Standard Time
DateTime EndTime = DateTime.Parse("2012-04-20 14:00:00.000Z");//Singapore Standard Time
bool UseAlarm = true;
StringBuilder sb = new StringBuilder(450);
sb.Append("BEGIN:VCALENDAR\n");
sb.Append("BEGIN:VEVENT\n\n");
sb.Append("DTSTART:");
sb.Append(StartTime.ToString("yyyyMMdd\\THHmmss\\Z"));
sb.Append("\nDTEND:");
sb.Append(EndTime.ToString("yyyyMMdd\\THHmmss\\Z"));
sb.Append("\nLOCATION:");
sb.Append("Location");
sb.Append("\nCATEGORIES:");
sb.Append(string.Empty);
sb.Append("\nTRANSP:OPAQUE\n");
sb.Append("SEQUENCE:0\n");
sb.AppendFormat("UID:RFCALITEM{0}\n", DateTime.Now.Ticks);
sb.Append("DTSTAMP:");
sb.Append(StartTime.ToString("yyyyMMdd\\THHmmss\\Z"));
sb.Append("\nX-ALT-DESC;FMTTYPE=text/html:");//
sb.Append("This is just for testing.");
sb.Append("\nSUMMARY:");
sb.Append("Title:Test ICS File");
sb.Append("\n\nPRIORITY:");
sb.Append(5);
sb.Append("\nCLASS:PUBLIC\n");
if (UseAlarm)
{
sb.Append("BEGIN:VALARM\n");
sb.Append("TRIGGER:PT15M\n");
sb.Append("ACTION:DISPLAY\n");
sb.Append("DESCRIPTION:Reminder\n");
sb.Append("PRIORITY:5\n");
sb.Append("END:VALARM\n");
}
sb.Append("END:VEVENT\n");
sb.Append("END:VCALENDAR");
答案 0 :(得分:2)
我不想把我的生活放在Outlook如何处理iCal数据上,所以这一切都没有保证......但是,你的代码中存在一些误解:
//Singapore Standard Time
DateTime StartTime = DateTime.Parse("2012-04-20 13:00:00.000Z");
这里的“Z”表示“祖鲁时间” - 所以DateTime.Parse
将其解释为UTC值,然后将其转换为运行代码的系统上的本地时间。所以在我的机器上,例如(在英国时间,即2012年4月20日的UTC + 1),这将创建一个DateTime
值,其时间为14:00。
如果您希望将值解析为本地日期/时间,那么您不应该有“Z”。
当你写这个值时,你可以(IIRC - 我已经完成任何iCal工作已经有一段时间了)用三种方式之一表达日期/时间:
(详情请咨询RFC 2445。)
目前尚不清楚您想要哪一个 - 第一个可能是最简单的,但您需要使用 UTC 日期/时间,而不是本地日期/时间。
有一点:.NET并没有真正帮助你,将事情与DateTime
混为一谈。您可能希望考虑使用我的Noda Time项目,该项目将“本地日期/时间”和“特定区域中的日期/时间”分开。