我有三个项目的解决方案:
- 核
- Outlook 加载项
- 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);