我想做的事情很简单:
private static TimeZoneInfo Tzi = // ... custom timeZone I've set;
public static DateTime ToTimeZone(DateTime dateTime, TimeZoneInfo target)
{
return TimeZoneInfo.ConvertTime(dateTime, Tzi, target);
}
想法是——所有到达服务器的日期都会自动转换为特定的时区,并像这样保存到数据库(UTC、美国中部、美国太平洋等)。
只要服务器上设置的时区与 Tzi 相同,这就会很好地工作。但是,如果不是这样,则转换失败 - 创建 DateTime 实例时,.NET 将其设置为机器的 TimeZone,然后 TimeZoneInfo.ConvertTime(dateTime, Tzi, target) 以一种时髦的方式处理我的请求。例如,假设服务器时区是太平洋 (UTC -8),我将 Tzi 设置为中央 (UTC -6),并且我的目标是新加坡 (UTC +8)。
现在,当我调用 TimeZoneInfo.ConvertTime(dateTime, Tzi, target) 首先将 dateTime 从 UTC -8“转换”为 UTC -6(Tzi 时区),增加 2 小时......然后才从 Tzi 到目标。
有没有办法向 TimeZoneInfo.ConvertTime 发出信号,表明我发送的 dateTime 在 TimeZone 中,我作为 from 参数传入,而不是在服务器的 TimeZone 中?
编辑: 好的,两个答案都是很好的建议,但似乎我有不同的麻烦。TimeZoneInfo.ConvertTime(dateTime, Tzi, target) 似乎工作正常,而真正的罪魁祸首实际上是:
return Json(new {data}, JsonRequestBehavior.AllowGet);
输出日期,如:“Created”:“/Date(1346810072950)/”。我已经确认发送日期因服务器上的 TimeZone 而不同(更改服务器的 TimeZone 后需要重新启动 AppPool)。任何人都有这方面的经验并建议如何影响 ASP.NET MVC 以 JSON 格式输出日期并发送回客户端?