【问题标题】:How to convert Listview dates to local time zone?如何将 Listview 日期转换为本地时区?
【发布时间】:2016-02-29 23:56:12
【问题描述】:

我在 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;
        }

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

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

问题出在日期列上,日期很好,但时间不是我的时间。不知道时间在什么地方,但在我这里现在是凌晨 1:52

如何获取/设置我所在位置的时间? 我在行中找不到:

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

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

【问题讨论】:

  • 不确定我是否理解,但您是想对实际列表进行排序还是只是想将日期列中的时间调整为当地时间?
  • 我认为排序很好,最新的项目添加在顶部。问题是“将日期列中的时间调整为当地时间”。
  • 如果您的问题是您刚刚在上面的评论中指定的,请edit您的问题标题,以便准确反映您的问题。

标签: c# .net winforms datetime


【解决方案1】:

试试这个:

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

您想使用DateTime.ToLocalTime() 方法。它为您完成繁重的工作。

希望对你有帮助


编辑:删除了不正确的版本,因为 OpenPop.Net 的文档指出 MessageHeader.DateSent 属性实际上是 DateTime 对象。

【讨论】:

    猜你喜欢
    • 2020-09-08
    • 2014-01-28
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    相关资源
    最近更新 更多