Azure函数和CosmosDb的日期和时间问题

时间:2018-09-28 08:06:31

标签: c# azure datetime azure-functions azure-cosmosdb

我曾经从英国办事处的一个应用程序(客户端)中获取系统的“快照”。 snapShot由快照的日期和时间中的时间标记标识。在CosmosDb中,时间戳看起来像这样。

"timeMark": "2018-05-11T15:14:51"

这是在英国使用DateTime.Now的时间,也是在英国拍摄snapShot的实际时间。 我认为将快照客户端放入Azure Function应用并每5分钟自动将其启动是一个好主意。除时间标记错误一个小时外,此方法运行良好。我希望将CosmosDb上的时间戳记为英国的实际时间。我使用以下代码来更改Azure函数上的时间戳:

public static DateTime UkTime(DateTime t)
{
    TimeZoneInfo ukTimeZone = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time");
    DateTime utcDate = DateTime.Now;
    DateTime ukTime = TimeZoneInfo.ConvertTimeFromUtc(utcDate, ukTimeZone);
    return ukTime;
}

时间标记现在在CosmosDb上看起来像这样

"timeMark": "2018-09-28T05:00:04+00:00"

哪个是在英国的正确时间(夏季时间)。现在,当我阅读时间倒计时时,它应该比现在早一个小时。

完全困惑为解决此问题的最佳方法。 目前,英国基本上是格林尼治标准时间+ 10月份格林尼治标准时间+ 01小时,它将恢复为格林尼治标准时间+ 00小时。我希望能够在CosmosDb上读取“原始”文档,作为在英国拍摄snapShot的正确时间,然后将其读回到应用程序中。似乎不必要地复杂!

1 个答案:

答案 0 :(得分:1)

我将该功能设置为在英国南部居住。我在Azure门户中将WEBSITE_TIME_ZONE设置为GMT标准时间,而不是使用DateTime。现在,我使用了DateTimeOffSet。

 DateTime uk = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second, 0);
 DateTimeOffset uk1 = new DateTimeOffset(uk);

我现在在CosmosDb中获得正确的timeMark

 "timeMark": "2018-09-28T10:36:02+01:00"

当我从CosmosDb中读回时,timeMark是正确的。