6

我有三个项目的解决方案:

  1. Outlook 加载项
  2. ASP.NET 网站

Outlook 加载项和网站都使用 Core 项目中的相同方法从 SQL Server 获取数据。当我将数据写入数据库时​​,我将DateTime两个表的所有值转换为 UTC 时间:

POLL_START              POLL_END
2013-07-31 12:00:00.000 2013-08-01 12:00:00.000

PICK_DATE
2013-07-31 12:00:48.000
2013-07-31 13:00:12.000

当我在 Outlook 加载项中获取数据时,这是正确的结果

在此处输入图像描述 在此处输入图像描述

在我的网站上打开相同的内容时,选择很好:

在此处输入图像描述

但是我的开始和结束时间被“破坏”了 - 添加了偏移量,但是使用了错误的时间:

在此处输入图像描述

这是我的转换代码,Outlook 和网站都使用:

private static void ConvertToLocalTime(POLL item)
{
    item.POLL_START = item.POLL_START.FromUTC();
    item.POLL_END = item.POLL_END.FromUTC();
}

private static void ConvertToLocalTime(PICK pick)
{
    if (pick.PICK_DATE != null) pick.PICK_DATE = ((DateTime)pick.PICK_DATE).FromUTC();
}

并执行DateTime.FromUtc()

public static DateTime FromUTC(this DateTime value)
{
    var local = TimeZoneInfo.Local;
    return TimeZoneInfo.ConvertTime(value, TimeZoneInfo.Utc, local);
}

我有同样的结果DateTime.ToLocalTime()。任何人的想法?

编辑1:

这是开始和结束在网站上的显示方式(以End代替结尾Start):

var startCell = new TableCell
        {
            Text = String.Format(
                @"<a href='{0}' title='{2}' target='_blank'>{1:dd.MM.yyyy HH:mm \U\T\Czzz}</a>",
                    Common.GetTimeAndDateHyperlink(_poll.Start, "Vote Start"),
                    _poll.Start,
                    ConvertToLocalTimeZone),
            CssClass = "InfoContent"
        };

和选择:

answerCell = new TableCell
            {
                Text = String.Format(
                    @"<a href='{0}' title='{2}' target='_blank'>{1}</a>",
                        Common.GetTimeAndDateHyperlink(ao.Time, ao.RealAnswer),
                        ao.RealAnswer,
                        ConvertToLocalTimeZone)
            };

ao.RealAnswer返回格式化的 DateTime 字符串:

return String.Format(WholeTime == true ? "{0:d}" : @"{0:dd.MM.yyyy HH:mm \U\T\Czzz}", Time);
4

1 回答 1

1

我现在解决了这个问题。start 和 end的DateTime值未正确转换:这些值未转换为本地时间。

网站将时间显示为本地时间的原因是,SQL 服务器存储每个DateTime值,而不是在插入期间DateTimeKind.Unspecified保留指定的数据(例如)。DateTimeKind.Utc从服务器读取数据时,所有的 Kinds 都是DateTimeKind.Unspecified,所以.ToString()ofDateTime使用本地的 kind。这导致UTC 时间 + 本地 UTC 偏移量

于 2013-08-01T07:32:15.123 回答