首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检查当地时间02:30而不遇到冬季/夏季时间问题

如何检查当地时间02:30而不遇到冬季/夏季时间问题
EN

Stack Overflow用户
提问于 2020-04-21 08:46:42
回答 1查看 33关注 0票数 0

我有一个程序,全世界的用户应该能够配置一个任务总是在X:YZ点钟运行。在当地时间,一年到头。

我考虑将时间戳存储在UTC偏移量中,但这带来了这样的问题:配置的时间与基于UTC的计算时间之间有一个小时的差异。(例如,当我将其配置为11月25日在德国的10:00时,它将是协调世界时09:00。但是在五月份,德国突然将是11:00,因为现在UTC的抵消时间是两个小时。

但是,仅仅将时间存储在数据库中会带来这样的问题:在一年中的某些日子里,一些小时根本不存在。当时钟向前移动时,时间从1:59直接跳到3:00。在特定的一天,2:00到2:59之间的任何时间都是无效的。

但我怎么知道某一天某一天在某一时区的某一时间是无效的呢?

编辑我测试了TimeZoneInfo.IsInvalid(),但它似乎不起作用:

在2020年3月29日星期日,没有凌晨02:30。然而,IsInvalid()报道了false

代码语言:javascript
复制
var tzi = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time");
var isInvalid = tzi.IsInvalidTime(new DateTime(2020, 3, 29, 2, 30, 0, DateTimeKind.Local));

编辑2

啊,好的,为了使IsInvalidTime()正常工作,需要将时间戳标记为未指定的时间戳:

代码语言:javascript
复制
var isInvalid = tzi.IsInvalidTime(new DateTime(2020, 3, 29, 2, 30, 0, DateTimeKind.Unspecified));
EN

回答 1

Stack Overflow用户

发布于 2020-04-21 09:59:37

如果正确地创建了TimeZoneInfo.IsInvalid()对象,DateTime就会工作。它不能具有DateTimeKind.Local属性,而必须具有DateTimeKind.Unspecified属性。

代码语言:javascript
复制
var tzi = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time");
var isInvalid = tzi.IsInvalidTime(new DateTime(2020, 3, 29, 2, 30, 0, DateTimeKind.Unspecified));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61339418

复制
相关文章

相似问题

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