在C#中获取冬季时间

时间:2019-05-03 06:13:11

标签: c# datetime

我们现在处于夏令时(UTC + 01:00),但无论我身在何处,我总是需要冬季。

例如现在时间是08:05,冬季时间是07:05

通过使用此功能,我可以找到是否节省时间

DateTime.Now.IsDaylightSavingTime()

这是变化量(1小时更改)

TimeZoneInfo.Local.GetAdjustmentRules()[0].DaylightDelta;

所以如果我做这样的事,对吗?

var winterTime= DateTime.Now;
if (DateTime.Now.IsDaylightSavingTime())
{
  winterTime = DateTime.Now.AddHours(-1 * delta.Hours);
}

还是还有另一种方法? (不使用任何第三种解决方案)

编辑:之所以这样问,是因为我们正在将固件刷新到nfc设备,并且设备中的某些日期应该是冬季。这就是为什么我们的工具应将冬季写为该设备的参数。

2 个答案:

答案 0 :(得分:3)

如果DaylightDelta不是整小时,最好直接使用TimeSpan。另外,您还需要在GetAdjustmentRules()中找到与当前日期匹配的规则。 GetAdjustmentRules()返回将来的规则和历史规则。

var now = DateTime.Today;
var rule = TimeZoneInfo.Local.GetAdjustmentRules().Where(x => now >= x.DateStart && now <= x.DateEnd).First();
winterTime = DateTime.Now - rule.DaylightDelta;

答案 1 :(得分:1)

  

我们现在处于夏令时(UTC + 01:00),但无论我身在何处,我总是需要冬季。

     

...

     

...之所以这样问,是因为我们正在将固件刷新到nfc设备,并且设备中的某些日期应该是冬季。这就是为什么我们的工具应该将冬季时间写成该设备的参数。

听起来您只是想获取要在设备上设置的UTC时间。如果是这样,只需使用DateTime.UtcNow。无需担心时区。

但是,如果您实际上想将标准时间(或冬季时间)用于您所在的任何本地时区(这似乎有点愚蠢,因为这不是当地时间的工作方式),但是如果您< strong> 确实 确实可以满足您的要求,而无需查询调整规则。相反,请尝试以下操作:

DateTime dt = DateTimeOffset.UtcNow.ToOffset(TimeZoneInfo.Local.BaseUtcOffset).DateTime;

这将采用当前UTC时间,应用本地时区的 base 偏移量,然后使用DateTime来返回.Kind == DateTimeKind.Unspecified。基本偏移量是在标准时间内应用的UTC偏移量,未对DST应用任何调整规则。