【问题标题】:Working with DateTimeOffset使用 DateTimeOffset
【发布时间】:2014-10-15 12:24:58
【问题描述】:

我在理解 DateTimeOffset 时遇到了一些问题...

我正在尝试为 Quartz-Job 创建一个简单的触发器。 有一个 triggerbuilder 可以创建这样的触发器:

var triggerbuilder =
                TriggerBuilder.Create()
                .WithIdentity(triggerName, ConstantDefinitions.InternalDefinitions.AdhocJobGroup)
                .StartAt(new DateTimeOffset(scheduledTime));

预定时间是一个日期时间。假设是new DateTime(2014, 10, 15, 14, 0, 0);

我住在位于中欧时区 (UTC+01:00) 的城市。

当我打印时

var dto = new DateTimeOffset(new DateTime(2014, 10, 15, 14, 0, 0));
Console.WriteLine(dto);

我得到以下结果:

15.10.2014 14:00:00 +02:00

+02:00 到底是什么意思?为什么是 +2:00 而不是 +01:00? 这是否意味着我的触发器将在 16:00 而不是 14:00 开始?

提前致谢

【问题讨论】:

  • 你确定吗?您的dto.OffSet 财产回报是多少?也许是因为夏令时?
  • 注意:当 DST 处于活动状态时,您的城市使用 CET。它使用 CEST,它是一个不同的时区偏移量并获得不同的名称。目前唯一使用 CET 的国家可能并不在欧洲。
  • 您的城市使用(欧洲)夏令时,直到 10 月的最后一个星期日。因此,10 月 15 日是一年中的“夏季”部分。所以 CEST (+02:00),而不是 CET (+01:00)。
  • @hvd 是的,你指的是WAT 没有夏令时,就像在尼日利亚和许多其他国家一样?
  • @JeppeStigNielsen 我指的是阿尔及利亚和突尼斯,据称它们的时区为 CET 但不使用 DST。尼日利亚使用相同的时区偏移量,但称它不同(WAT,如你所说)。但是,实际上,我不确定我发现的是否正确。也许其中一个国家的居民或其他可靠来源可以解决这个问题。

标签: c# .net datetime quartz-scheduler quartz.net


【解决方案1】:

15.10.2014 14:00:00 +02:00 是一个 datetimeoffset(日期时间 + 时区),表示当地时间下午 2 点,时区为 +2 UTC

这相当于 UTC 中的 15.10.2014 12:00:00

关于为什么是+02:00而不是+01:00,夏令时有效吗?

Converting Between DateTime and DateTimeOffset

【讨论】:

  • 你是对的,我的 2014-10-15 16:00 日期的 DateTimeOffset 被保存为数据库的刻度,当我用这些刻度创建一个新的 DateTime 时,它​​说它是 2014-10- 15 14:00...你知道我怎样才能让它保存为16:00吗?
  • 我需要查看您的代码。我们在谈论 C# 还是 TSQL?另外,考虑提出一个单独的问题。
  • Quartz.NET 在数据库中始终将时间保存为 UTC。这就是为什么它将具有 14:00 和 隐式 UTC 时区的值,您需要使用 TimeZoneInfo 将其转换为您所在的时区。或者只需调用 ToLocalTime()。
猜你喜欢
  • 2012-03-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多