首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在相对于用户本地时区的DateTime中使用C#的最佳实践

在相对于用户本地时区的DateTime中使用C#的最佳实践
EN

Stack Overflow用户
提问于 2022-07-10 23:27:21
回答 1查看 215关注 0票数 0

我有一个带有折扣/交易的应用程序,用于需要在特定日期时间(即从1st January 2022 7:00 am31st January 2022 5:00 pm )之间启用的项。

设置这些开始和结束日期的用户可以基于世界上任何地方,但是终端用户需要观察这些相对于其本地时间的开始和结束日期。

例如,该交易的用户是在马来西亚GMT+8为他们在印尼各地的终端消费者(这里有三个独立的时区GMT+7GMT+8GMT+9)以及新西兰的一些其他终端消费者(那里有夏令储蓄和GMT+12GMT+13交替使用)。

因此,GMT+13的消费者必须观察1st Jan 7am中的交易,而GMT+7的另一个消费者则会在几个小时后观察它,但在当地时间仍然是1st Jan 7am

他们在手机上的一个应用程序上观察这些交易,在商店里他们声称这些交易。因此,即使消费者可以改变手机的时区,以确保交易更快--他们必须去商店认领他们,并且只能在商店的时区到达可用的时间时才能这样做。

我目前的想法是在没有任何时区的情况下将这些存储到使用具有DateTime类型的Unspecified类型的DateTime中,并且该DateTime的任何使用都将相对于设备上配置的使用者/存储本地时间。我看不出有什么办法把这个日期保存为UTC

有没有其他办法?是否通过使用新的DateOnlyTimeOnly结构来更好地支持这个用例?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-11 02:11:05

,我目前的想法是,在没有任何时区的情况下将这些存储到使用具有Unspecified类型的DateTime类型中,并且该DateTime的任何使用都将相对于设备上配置的使用者/存储本地时间。

是的,这将适合您描述的场景。

这有时被称为“浮动时间”。您可能还会看到它被描述为“电视时间”,因为这种场景在广播电视节目播出的时间方面是很常见的。

请记住以下几点:

  • 在存储或传输这些值时,不要将它们视为UTC,也不要将它们与任何特定偏移量相关联。只需使用日期和时间。

  • 当您在用户的设备上使用这些值时,您可以应用本地时区,而不实际知道该时区是什么。例如,在.NET中,您可以使用TimeZoneInfo.LocalDateTimeKind.Local。在JavaScript中,您可以使用Date对象等

  • 当您在其他地方使用这些值时,例如在后端系统、调度程序或管理UI中,您将需要知道用户的时区ID。将该值视为属于该用户时区的值,然后将其转换为DateTimeOffset,然后将其与其他值进行比较。例如:

TimeZoneInfo z= TimeZoneInfo.FindBySystemTimeZoneId(userTZ);TimeSpan偏移量= tz.GetUtcOffset(dt);DateTimeOffset dto =新DateTimeOffset(dt,偏移量);if (dto >= DateTimeOffset.UtcNow) .

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

https://stackoverflow.com/questions/72932507

复制
相关文章

相似问题

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