转换msg文件中的日期以匹配outlook local dates muddle

时间:2016-06-21 14:04:00

标签: time timezone aspose msg

我正在获取MSG文件并更改日期以匹配outlook中的本地日期。 (在Outlook中打开邮件时发送日期相同)。 但时间似乎是1小时或许多小时。我已经抛弃时间进一步调查: - 我正在使用Aspose打开msg文件。 C#

1.msg显示:2016年1月5日00:46在outlook 2016.GMT

05/01/2011 00:46:07,Kind = Utc TimeZone offset = -08:00:00 实际UTC时间是05/01/2011 00:46:07 消息日期为通用时间+ timezoneoffset:04/01/2011 16:46:07 timezoneoffset:-08:00:00 计算的通用消息日期:04/01/2011 16:46:07 输出04/01/2011 08:46 AM

2.msg显示2016年6月20日16:25在outlook 2016.GMT

20/06/2016 16:25:23,Kind = Local TimeZone offset = 02:00:00 实际UTC时间是20/06/2016 15:25:23 消息日期为通用时间+ timezoneoffset:20/06/2016 17:25:23 timezoneoffset:02:00:00 计算的通用消息日期:2016年6月20日17:25:23 输出06/20/2016 07:25 PM

关于如何纠正这个与outlook相同的任何想法?我看到有些时候是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;

谢谢, 李。

1 个答案:

答案 0 :(得分:0)

在Aspose.Email论坛的thread上,我们相信您的查询已经得到了答案。如果您仍然发现任何问题或有疑惑,可以在相应的主题上进一步查询。

我与Aspose一起担任开发者布道者。