c# - C# - 发送会议预约 - EN 客户的时间错误
问题描述
我正在根据数据库中的日期发送自动会议邀请。我正在使用此代码段来构建邀请文件:
private string BuildInvitationFile(MailMessage mail, DateTime fromDate, DateTime toDate)
{
StringBuilder str = new StringBuilder();
str.AppendLine("BEGIN:VCALENDAR");
str.AppendLine("PRODID:-//Schedule a Meeting");
str.AppendLine("VERSION:2.0");
str.AppendLine("METHOD:REQUEST");
str.AppendLine("BEGIN:VEVENT");
str.AppendLine(string.Format("DTSTART;VALUE=DATE:{0:yyyyMMdd}", fromDate));
str.AppendLine(string.Format("DTEND;VALUE=DATE:{0:yyyyMMdd}", toDate.AddDays(1)));
str.AppendLine("LOCATION: " + "");
str.AppendLine(string.Format("UID:{0}", Guid.NewGuid()));
str.AppendLine(string.Format("DESCRIPTION:{0}", mail.Body));
str.AppendLine(string.Format("X-ALT-DESC;FMTTYPE=text/html:{0}", mail.Body));
str.AppendLine(string.Format("SUMMARY:{0}", mail.Subject));
str.AppendLine(string.Format("ORGANIZER:MAILTO:{0}", mail.From.Address));
str.AppendLine(string.Format("ATTENDEE;CN=\"{0}\";RSVP=TRUE:mailto:{1}", mail.To[0].DisplayName, mail.To[0].Address));
str.AppendLine("BEGIN:VALARM");
str.AppendLine("TRIGGER:-PT15M");
str.AppendLine("ACTION:DISPLAY");
str.AppendLine("DESCRIPTION:Reminder");
str.AppendLine("END:VALARM");
str.AppendLine("END:VEVENT");
str.AppendLine("END:VCALENDAR");
return str.ToString();
}
问题是,当此邀请发送给具有英文版 Outlook 客户端的收件人(我们在匈牙利 - CET)时,DTSTART 和 DTEND 都会增加 2 小时。感觉有点奇怪,因为我没有使用任何日期时间,只有日期,这些会议应该是“全天”会议。
解决方案
假设iCalendar 格式。DateTimes 应根据ISO 8601进行格式化。据我所知,以下内容应该是有效的:
fromDate.ToUniversalTime().ToString("yyyyMMddTHHmmssZ")
产生像这样的时间20201013T123616Z
“Z”后缀表示时间为通用时间。将由客户端将其转换为本地时区。
推荐阅读
- c++ - 如何从对象的数据成员构造 std::set 或 Boost flat_set?
- text - 使文本的特定部分在颤动中可点击
- ios - 你如何在 Xcode 中使用 Flutter Flavors
- kivy - buildozer 调试错误“不支持的 major.minor 版本 52.0”错误
- javascript - 如何重置输入文件?
- html - 我如何使用在 QCheckbox 的文本描述中?
- mysql - 为什么 INSERT INTO 使用引用表中的现有值使外键约束失败?
- numpy - ValueError:无法将字符串转换为浮点数:'2,019,278' - 可能是非法字符或格式?
- python - 无法使用 Windows 身份验证通过 pyodbc 连接到 SQL Server 2005
- ipa - 使用请求的方法 validateSoftwareSPIUsage 将应用程序上传到 AppStore 时发生错误