datetime . tuniversaltime()在asp.net应用程序中被忽略

本文关键字:应用程序 net asp tuniversaltime datetime | 更新日期: 2023-09-27 18:16:46

我正在开发一个ASP。. NET MVC应用程序,我在数据库中存储一个DateTime对象。

服务器位于德国,我来自丹麦。日志含义设置web服务器运行UTC时间。

当我在数据库中保存DateTime对象时,我将其存储为本地时间,如下所示:

PeriodEndDate = billingTaskForm.PeriodEndDate.ToLocalTime()

我甚至试图将其设置为.ToUniversalTime(),看看它是否会被存储为21:59,而不是这样。

(使用实体框架)

数据库中PeriodEndDate的值现在是2015-10-08 23:59

现在,在运行的线程中,我指定线程文化为丹麦语,如下所示:

Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK", false);

(使用PeriodEndDate日期的方法在它自己的线程中运行,与UI分开,因为它是一个异步的,长时间运行的任务)

在后面的代码中,我使用PeriodEndDate来过滤一些合约,如下所示:

var contracts = firm.Contracts.Where(x => x.EndDate == null || x.EndDate >= periodEndDate.ToUniversalTime());

合约以UTC日期存储在数据库中,这意味着合约结束日期存储为21:59,因此我需要将该日期与我的PeriodEndDate匹配,但作为UTC,因此我进行了.ToUniversalTime()调用。

然而,查看日志,.ToUniversalTime()调用似乎以某种方式被"忽略",因为PeriodEndDate变量是23:59,即使我做了.ToUniversalTime()转换。如果我没弄错的话,应该是21:59吧?

有人知道为什么没有转换吗?

datetime . tuniversaltime()在asp.net应用程序中被忽略

DateTime对象上的ToLocalTimeToUniversalTime方法用于在UTC和运行代码的计算机的本地时区之间进行转换。它们不属于ASP。网络应用程序。DateTime.Now也没有。

许多服务器都遵循将其时区设置为UTC的最佳实践,因此在这些环境中,除了更改.Kind元数据属性外,您将看不到任何区别。

通常,在服务器端环境中,如ASP。Net中,您不应该依赖于服务器的本地时区来做任何特别的事情。相反,您应该使用TimeZoneInfo类在UTC和特定的时区之间进行转换。例如:

string tzid = "Romance Standard Time"; // for Denmark
TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById(tzid);
DateTime utc = TimeZoneInfo.ConvertTimeToUtc(localTime, tz);

同时,重要的是要理解时区和文化是两个不同的东西。

尝试c#中的DateTimeOffset和数据库中的DateTime2