【发布时间】:2016-06-21 14:03:59
【问题描述】:
我正在获取 MSG 文件并更改日期以匹配 Outlook 中的本地日期。 (在 Outlook 中打开邮件时的发送日期相同)。 但时间似乎关闭了 1 小时或数小时。我已经放弃了进一步调查的时间:- 我正在使用 Aspose 打开 msg 文件。 c#
1.msg 显示:2016 年展望 05/01/2011 00:46。格林威治标准时间
05/01/2011 00:46:07,种类 = Utc 时区偏移 = -08:00:00 实际 UTC 时间为 05/01/2011 00:46:07 消息日期到世界时 + 时区偏移:04/01/2011 16:46:07 时区偏移:-08:00:00 计算通用味精日期:04/01/2011 16:46:07 输出 04/01/2011 08:46 AM
2.msg 在 Outlook 2016 中显示 20/06/2016 16:25。格林威治标准时间
20/06/2016 16:25:23,种类 = 本地 时区偏移 = 02:00:00 实际 UTC 时间为 20/06/2016 15:25:23 消息日期到世界时 + 时区偏移:20/06/2016 17:25:23 时区偏移:02:00:00 计算通用味精日期:20/06/2016 17:25:23 输出 06/20/2016 07:25 PM
关于如何纠正此问题以显示与前景相同的任何想法?我看到有些时间是 UTC,有些是本地时间,有没有人知道的解决方案?
MailMessage msg = MailMessage.Load(inFile);
MemoryStream ms = new MemoryStream();
Console.WriteLine(msg.Date.ToString() + ", Kind = " + msg.Date.Kind);
Console.WriteLine("TimeZone offset = " + msg.TimeZoneOffset);
Console.WriteLine("Actual UTC Time is " + msg.Date.ToUniversalTime().ToString());
Console.WriteLine("Message date to universal time + timezoneoffset: " + (msg.Date.ToUniversalTime() +
msg.TimeZoneOffset).ToString());
Console.WriteLine("timezoneoffset: " + msg.TimeZoneOffset.ToString());
// do calculation.
TimeZone localZone = TimeZone.CurrentTimeZone;
TimeSpan ts = localZone.GetUtcOffset(msg.Date);
msg.Date = msg.Date + msg.TimeZoneOffset;
Console.WriteLine("calculated universal msg date: " +msg.Date.ToUniversalTime().ToString());
if (msg.Date.Second >= 30) // for rounding up to match outlook
{
// ... Days, hours, minutes, seconds, milliseconds.
TimeSpan span = new TimeSpan(0, 0, 0, 31, 0);
msg.Date = msg.Date + span;
}
MhtMessageFormatter mhtlFormat = new MhtMessageFormatter();
mhtlFormat.DateTimeFormat = "ddd MM/dd/yyyy hh:mm tt";
mhtlFormat.Format(msg);
MhtSaveOptions mhtSaveOptions = new MhtSaveOptions();
mhtSaveOptions.MhtFormatOptions = MhtFormatOptions.None;
mhtSaveOptions.MhtFormatOptions = mhtSaveOptions.MhtFormatOptions | MhtFormatOptions.HideExtraPrintHeader;
谢谢, 李。
【问题讨论】: