gpt4 book ai didi

c# - 将 UTC 转换为本地时间返回奇怪的结果

转载 作者:太空狗 更新时间:2023-10-29 21:58:14 27 4
gpt4 key购买 nike

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

  1. 核心
  2. Outlook 插件
  3. 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 加载项中获取数据时,这是正确的结果:

enter image description here enter image description here

在我的网站上打开时,选择很好:

enter image description here

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

enter image description here

这是我的转换代码,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);

最佳答案

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

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

关于c# - 将 UTC 转换为本地时间返回奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17970620/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com