Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向Datetime对象C添加时区信息#_C#_Entity Framework_Datetime_Asp.net Core Mvc - Fatal编程技术网

C# 向Datetime对象C添加时区信息#

C# 向Datetime对象C添加时区信息#,c#,entity-framework,datetime,asp.net-core-mvc,C#,Entity Framework,Datetime,Asp.net Core Mvc,我在SQL Server中存储了日期时间,没有任何时区信息。时间以UTC为单位,但未存储在数据库中。使用entityframework,我想知道添加时区信息的最佳方法,或者何时是添加时区信息的最佳地点 我可以把这个应用到模型上吗?还是发送到客户端之前的API端点?我不知道这是一个好的答案还是更多的黑客攻击,但这就是我所做的: foreach(var result in results) { if(result.Stops != null)

我在SQL Server中存储了日期时间,没有任何时区信息。时间以UTC为单位,但未存储在数据库中。使用entityframework,我想知道添加时区信息的最佳方法,或者何时是添加时区信息的最佳地点


我可以把这个应用到模型上吗?还是发送到客户端之前的API端点?

我不知道这是一个好的答案还是更多的黑客攻击,但这就是我所做的:

foreach(var result in results) {
            if(result.Stops != null) 
                foreach(var stop in result.Stops) {
                    stop.EarliestArrival = DateTime.SpecifyKind((DateTime)stop.EarliestArrival, DateTimeKind.Utc);
                    stop.LatestArrival = DateTime.SpecifyKind((DateTime)stop.LatestArrival, DateTimeKind.Utc);
                }
        }

DateTime有一个时间属性,您可以将它附加到现有的DateTime对象中,为什么需要添加它?记录所有时间都是UTC就足够了,或者,当时间需要格式化为字符串时,使用ISO 8601并附加“Z”。如果您需要对这些时间和非UTC时间执行计算,则是另一回事——您可以使用
DateTime.SpecifyKind
DateTime
显式标记为
UTC
,如果还没有,然后对其进行
DateTimeOffset
。仅当您打算实际记录和/或混合时区时,在DB中包含时区或使用
日期时间偏移量
才有意义。在这种情况下,时区信息存储在用户配置文件中,但所有日期时间均为UTC,但不含时区数据。可能是在创建此数据库时,SQL Server不知道时区。以UTC存储时间适合大多数使用情况。从DB中检索UTC时间后,您可以从用户配置文件中将其转换为特定时区。这似乎是API问题,而不是数据库问题。您当然可以让DB层提供时区,但在数据传输之前返回包含时区信息的数据似乎更为明显。如何最好地实现这一点取决于您如何声明端点,但让它返回
DateTimeOffset
并在返回之前转换
DateTime
似乎是最明显的方法。