gpt4 book ai didi

c# - .NET DateTime & TimezoneInfo.ConvertTime 聚会

转载 作者:行者123 更新时间:2023-12-02 05:31:49 26 4
gpt4 key购买 nike

我想做的事情很简单:

    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 发出信号,表明我发送的日期时间在我作为参数传入的 TimeZone 中,而不是在服务器的 TimeZone 中?

编辑:好的,这两个答案都是很好的建议,但我似乎遇到了不同类型的麻烦。 TimeZoneInfo.ConvertTime(dateTime, Tzi, target) 似乎工作正常,真正的罪魁祸首实际上是:

return Json(new {data}, JsonRequestBehavior.AllowGet);

输出日期如下:“创建”:“/日期(1346810072950)/”。我已确认发送日期因服务器上的时区而异(更改服务器时区后需要重新启动 AppPool)。任何人都有这方面的经验和建议如何影响 ASP.NET MVC 输出发送回客户端的 JSON 中的日期的方式?

最佳答案

ConvertTime应该做的工作。也许您的问题是 DateTime.Kind .

请看下面的例子:

// Gets current local date
// Returns 04/09/12 11:30 in my case
var date = DateTime.Now;

// Sets DateTime as Unspecified kind (not local nor UTC)
// Returns same date as before, but the date is not tagged as "local"
date = DateTime.SpecifyKind(date, DateTimeKind.Unspecified);

// Converts the current date, specified as UTC+12, into a date specified as UTC-11
// Returns 03/09/12 12:30 in my case, which is the expected result
// (23 hours between previous date and result)
var zz = TimeZoneInfo.ConvertTime(
date,
TimeZoneInfo.FindSystemTimeZoneById("UTC+12"),
TimeZoneInfo.FindSystemTimeZoneById("UTC-11"));

关于c# - .NET DateTime & TimezoneInfo.ConvertTime 聚会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12260143/

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