首页 文章

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

提问于
浏览
0

我曾经在英国办公室的应用程序(客户端)拍摄我们系统的“Snap Shot” . snapShot由快照的日期和时间的时间标记标识 . 在CosmosDb中,时间戳看起来像这样 .

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

这是英国使用 DateTime.Now 的时间,也是英国拍摄snapShot的实际时间 . 我认为将快照客户端放入Azure功能应用程序并每隔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"

这是在英国(夏令时)拍摄的正确时间 . 现在,当我读到时间倒退时,它应该是一个小时 .

完全混淆是解决这个问题的最佳方法 . 目前基准英国格林威治标准时间是格林尼治标准时间9月,比格林威治标准时间9月份早10个小时,将恢复到格林尼治标准时间00小我希望能够将CosmosDb上的“原始”文档读作英国拍摄snapShot的正确时间,然后将其读回到应用程序中 . 似乎不必要地复杂!

1 回答

  • 1

    我将该功能设置为驻留在英国南部 . 我将Azure门户中的WEBSITE_TIME_ZONE设置为GMT标准时间,而不是使用DateTime.Now我使用了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是正确的 .

相关问题