首页 > 解决方案 > 从 SQL Server 数据库中颤动错误的 UTC 时间

问题描述

我在将我的时间识别DateTime为 UTC 时间时遇到了问题。通过 http 请求,我将一些数据存储在包含 UTC 的 SQL Server 数据库中DateTime。这是通过实体框架完成的。

var workingTime = new WorkingTime()
{
    StartDateTime = dto.StartDateTime.ToUniversalTime(),
    EndDateTime = dto.EndDateTime.ToUniversalTime(),
    ...
};

await _repository.AddAsync(workingTime);

在此处输入图像描述

这看起来很安静,请求是2020-06-13 01-59-41:690在德国完成的,所以存储的数据是正确的 UTC 时间。

现在我在我的颤振应用程序中加载这些数据,如果我调试我的应用程序,加载的datetime内容会说这不是 UTC 时间。

在此处输入图像描述

我不确定,如果我存储数据错误,或者我在颤振内部的解析是错误的,但我看不到我在这里做错了什么。

如果您需要代码或更多信息,请告诉我。

编辑

所以经过大量的测试,我发现了一些东西:

Debug.WriteLine(model.EndDateTime.Kind);

这将打印“未指定”。存储 DateTime 或从中读取似乎有问题。

标签: sql-serverdatetimeflutterutc

解决方案


每次都明确说明 UTC。向编译器指示您想要 UTC 时间。要获取 UTC 时间中的毫秒SinceEpoch:

DateTime dateTime=DateTime.now().toUtc();
int epochTime = dateTime.toUtc().millisecondsSinceEpoch;

要获取 UTC 日期时间:

DateTime dt=DateTime.fromMillisecondsSinceEpoch(millisecondsSinceEpoch).toUtc();

推荐阅读