我的 UI 层中有一些代码,它应该采用 UTC 格式的 DateTime,并将其转换为本地日期时间:
在我的数据层中,我只是这样做:
private DateTime ConvertToLocal(DateTime dt)
{
if (_currentTimeZoneUser == string.Empty)
{
var u = new UserData(_userId).GetUser(_userId);
_currentTimeZoneUser = u.TimeZoneId;
}
var reply = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(dt, _currentTimeZoneUser);
return reply;
}
这样做是检查是否设置了 _currentTimeZoneUser。如果没有,请从用户表中获取 zimezone,然后进行转换。
这段代码正在运行,我得到了一个有效的结果。
然后我将代码复制到我的 UI 层(因为我还需要在那里进行转换,用于数据网格),但“回复”始终等于“dt”。
我用谷歌搜索,并注意到我应该以稍微不同的方式来做。所以我将我的 UI 方法更改为:
public static DateTime GetLocalDateTime(DateTime serverTime)
{
var timeZoneId = HttpContext.Current.Session["TimeZoneId"].ToString();
TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
var reply = TimeZoneInfo.ConvertTimeFromUtc(serverTime, cstZone);
return reply;
}
它有效!
我看不出它为什么在我的数据层中起作用,但在 UI 中,我需要更改代码。
我在其中一种方法中的时间转换代码有问题吗?