如何将Listview日期转换为本地时区?

时间:2016-02-29 23:56:13

标签: c# .net winforms datetime

我在ListView中有3列。发件人,主题,日期 我正在使用OpenPop库。

private int numberofallmessages = 0;
        private int countMsg = 0;

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            OpenPop.Pop3.Pop3Client PopClient = new OpenPop.Pop3.Pop3Client();
            PopClient.Connect("mail", 110, false);
            PopClient.Authenticate("me", "me",
                OpenPop.Pop3.AuthenticationMethod.UsernameAndPassword);
            List<string> uids = PopClient.GetMessageUids();
            int messageCount = PopClient.GetMessageCount() -1;
            numberofallmessages = messageCount;
            allMessages = new List<OpenPop.Mime.Message>(messageCount);
            for (int i = messageCount; i > 0; i--)//for (int i = messageCount - 1; i > -1; i--)
            {
                if (backgroundWorker1.CancellationPending == true)
                {
                    e.Cancel = true;
                    return;
                }
                string currentUidOnServer = uids[i];
                if (!seenUids.Contains(currentUidOnServer))
                {
                    if (i > 0)
                        allMessages.Add(PopClient.GetMessage(i));
                    SaveFullMessage(PopClient.GetMessage(i), i);
                    w = new StreamWriter(emailsIDSFile, true);
                    w.WriteLine(currentUidOnServer);
                    w.Close();
                    int nProgress = (messageCount - i + 1) * 100 / messageCount;
                    backgroundWorker1.ReportProgress(nProgress, PopClient.GetMessageCount().ToString() + "/" + i);
                }
            }
            PopClient.Disconnect();
        }

        private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            pbt.Value = e.ProgressPercentage;
            pbt.Text = e.ProgressPercentage.ToString() + "%";
            pbt.Invalidate();
            label8.Text = e.UserState.ToString();
            label8.Visible = true;
            lvnf.Items.Add(new ListViewItem(new string[]
            {
              allMessages[countMsg].Headers.From.ToString(),         //From Column
              allMessages[countMsg].Headers.Subject,                 //Subject Column
              allMessages[countMsg].Headers.DateSent.ToString()      //Date Column
            }));

            countMsg += 1;
        }

问题出在我认为的改进事件中。我将项目添加到每一列。

当它将电子邮件添加到ListView时,我看到它是这样的:

Emails

问题出在日期列上,日期很好,但时间不是我的时间。不知道时间到了什么地方但在我的位置它现在是1:52 AM

我如何获得/设定我的位置时间? 我无法找到答案:

allMessages[countMsg].Headers.DateSent.ToString()

如何将其更改为我的时间。

1 个答案:

答案 0 :(得分:1)

试试这个:

allMessages[countMsg].Headers.DateSent.ToLocalTime().ToString();

您想要使用DateTime.ToLocalTime()方法。它为你做了繁重的工作。

希望这有帮助

编辑:删除了错误的版本,因为OpenPop.Net的文档声明MessageHeader.DateSent属性实际上是DateTime对象。