我曾经从英国办事处的一个应用程序(客户端)中获取系统的“快照”。 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的正确时间,然后将其读回到应用程序中。似乎不必要地复杂!
答案 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是正确的。