我曾经在英国办公室的应用程序(客户端)拍摄我们系统的“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 回答
我将该功能设置为驻留在英国南部 . 我将Azure门户中的WEBSITE_TIME_ZONE设置为GMT标准时间,而不是使用DateTime.Now我使用了DateTimeOffSet .
我现在在CosmosDb中获得正确的timeMark
当我从CosmosDb回读时,timeMark是正确的 .