Microsoft Azure WebJobs时区差异



我有几个azure webjobs,当通过该实体上的给定时间戳时,应该从db中获取某些实体。问题是我的时区(GMT 1-丹麦(,到现在为2小时的差异(DST(。因此,WebJobs目前要为时已晚2个小时。在服务中,我将DateTime.Now用作当前时间的标记。DB中的时间戳看起来不错。我需要弄清楚如何使它们保持同步,最好不要将整个服务重写为DateTime.UtcNow

我在Azure中添加了WEBSITE_TIME_ZONE应用程序设置,并将其设置为Romance Standard Time,该设置应该是正确的,应该根据其他帖子解决问题,但这无济于事。

Microsoft Azure,WebJob,如果我安排WebJob的时区,请使用Cron Expression在指定时间每天运行

C#来自服务的代码段:

var now = DateTime.Now;
var orderBatch = await db.OrderEntities
  .Where(o => o.OrderStatus == (int)Status.Accepted)
  .Where(o => o.ExecutionTime.HasValue && o.ExecutionTime < now)
  .Where(o => (o.NextSendTry == null || o.NextSendTry < now))
  .Select(o => new
  {
    OrderId = o.Id
  })
  .Take(100)
  .ToListAsync();

webjobs的日志摘要记录当前时间为04:38而不是02:38。有一个订单,执行时间为03:00,所以应该被提取,但直到05:00才:

[06/29/2019 02:38:21 > 98c279: INFO] 2019-06-29 04:38:21.618 +02:00 
[INF] 0 orders fetched from db @ 6/29/2019 4:38:21 AM

Web应用程序应具有Romance Standard Time,并且在此应用程序服务中运行的WebJobs应该具有相同的时区。因此,DateTime.Now应该是服务器(Azure Web应用程序(当前时间。

------ 更新 ------

根据Matt的评论,我们尝试使用.toUniversalTime()扩展程序在运行时转换DB时使用UTC时间,然后再次对其进行检查DateTime.UtcNow。它运行良好,DB中的时代仍然是我们希望的当地时代。

我建议使用dateTimeOffset(.net(/dateTimeOffset(sql(数据类型,而不是将时间戳作为dateTime(.net(/datetime2(sql(在数据库中。p>然后,您可以在订单属性executiontime中设置为dateTimeOffset..now或new DateTimeOffset(DateTime specifictime(,并为您的WebJob代码执行相同的操作。

比较将考虑到时区之间的时间表。

希望它有帮助。欢呼!

相关内容

  • 没有找到相关文章

最新更新