首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Microsoft Azure Webjobs时区差异

问Microsoft Azure Webjobs时区差异
EN

Stack Overflow用户
提问于 2019-07-03 13:46:35
回答 1查看 455关注 0票数 1

我有几个Azure WebJobs,当实体上的给定时间戳被传递时,它应该从DB获取一些实体。问题是我的时区(GMT+1 -丹麦),到目前为止有两个小时的差异(DST)。因此,WebJobs目前已经晚了2个小时。在服务中,我使用DateTime.Now作为当前时间的标记。DB中的时间戳看起来很好。我需要弄清楚如何使它们同步,最好不必将整个服务重写为DateTime.UtcNow。

我在Azure中添加了WEBSITE_TIME_ZONE应用程序设置,并将其设置为Romance Standard Time,这应该是正确的,并且应该根据其他帖子修复问题,但这没有帮助。

Microsoft,Webjob,其中,如果我使用cron表达式安排在指定时间每天运行run作业,则该时区将运行。

服务中的C#代码片段:

代码语言:javascript
复制
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();

当前时间为04:38而不是02:38的WebJobs日志片段。有一个命令的执行时间到03:00,所以应该已经获取它,但是直到05:00才得到:

代码语言:javascript
复制
[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 )。

-更新

根据Matt的评论,我们尝试在服务中使用UTC时间,方法是使用.toUniversalTime()扩展在运行时转换DB时间,然后对DateTime.UtcNow进行检查。它运行良好,DB中的时间仍然是本地时间,正如我们所希望的那样。

EN

回答 1

Stack Overflow用户

发布于 2019-07-03 17:59:04

我建议使用DateTimeOffset(.NET)/日期时间偏移量(SQL)数据类型,而不是将时间戳作为DateTime(.NET)/datetime2(SQL)存储在数据库中。

然后,您可以在OrderEntity属性ExecutionTime中将DateTimeOffset.Now或新DateTimeOffset(DateTime specificTime)设置为DateTimeOffset.Now或新DateTimeOffset(DateTime specificTime),并对set作业代码执行相同的操作。

比较将考虑时区间的时差。

希望能帮上忙。干杯!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56871617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档