将Gmail日期转换为Gmail帐户中显示的DateTime

Pre*_*eet 3 c# asp.net datetime-format gmail-api

我在c#ASP.net应用程序中使用Gmail API收到收件箱消息。所有邮件均来自不同的时区(州/国家/地区),我想在我自己的时区中显示日期,因为它在Gmail应用程序中显示。我搜索了很多时区之间的转换,但无法解决,可能是因为我没有正确获取它。

我到目前为止但尝试的代码是:(它适用于大多数消息,但对于少数消息却无法正确显示DateTime)

例如:

Gmail应用中显示的时间:30/11/2017 2:11 AM

我的代码来自Gmail API的输入/值:2017年11月29日,星期三10:11:35 -0800

以下是我从当前的Gmail收件箱消息中获取的一些值:

在此处输入图片说明

 var re = service.Users.Messages.List("me");
 re.LabelIds = "INBOX";
 re.Q = "is:all";
 var res = re.Execute();
 if (res != null && res.Messages != null)
 {               
   foreach (var email in res.Messages)
   {    
     var emailInfoResponse = service.Users.Messages.Get("me", email.Id).Execute();
    if (emailInfoResponse != null)
    {
      foreach (var mParts in emailInfoResponse.Payload.Headers)
      {
        if (mParts.Name == "Date")
        {
          date = mParts.Value;
        }          
      }
    }
  }
}

My Time Zone is: (UTC+08:00) Perth
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。谢谢!

EdS*_*dSF 5

{
  "id": string,
  "threadId": string,
   ....
  "internalDate": long,
  "payload": {
   ....
Run Code Online (Sandbox Code Playgroud)

internalDate long
内部消息创建时间戳(时期ms),用于确定收件箱中的顺序。对于普通的SMTP接收电子邮件,这表示邮件最初被Google接受的时间,它比Date标头更可靠。但是,对于API迁移的邮件,客户端可以将其配置为基于Date标头。

REF:https : //developers.google.com/gmail/api/v1/reference/users/messages

根据上述Google文档,以下是一种方法:

//Some epoch time in ms
var gmail_date = 1512007768005; 

//Get DateTime of epoch ms
var to_date = DateTimeOffset.FromUnixTimeMilliseconds(gmail_date).DateTime;

//This is your timezone offset GMT +8
var offset = 8;

Console.WriteLine(to_date - new TimeSpan(offset *-1, 0, 0));
Run Code Online (Sandbox Code Playgroud)

为您提供11/30/2017 10:09:28 AM