【发布时间】:2021-07-19 12:24:42
【问题描述】:
我正在为营养师开发一个应用程序。在这个应用程序中,营养师可以为世界各地的客户设置饮食。现在我面临一个关于营养师设置的MealTime 的问题。让我们考虑以下示例。
如果营养师在印度并将早餐用餐时间设置为28/04/2021 09:00:00 AM(IST)。我将此值以 GMT 格式 (28/04/2021 03:30:00 AM) 存储到 sql database。客户在迪拜,然后他看到早餐时间到28/04/2021 07:30:00 AM,而不是09:00:00 AM。
处理这种情况的最佳方法是什么?
【问题讨论】:
-
我建议在设置进餐时间时获取营养师的时区信息(从客户端获取时区并将其存储在数据库中)。然后使用该时区信息来操纵时间,同时将其显示给其他人
-
C# 对时区的支持很差。这就是为什么大多数开发者使用 NodaTime 而不是
DateTime/DateTimeOffset -
感谢您的回复。我已将营养师 Noda 时区存储到 db。喜欢
Asia/Kolkata -
@Ajay 不存储
datetime。不要发送您只认为是 UTC 的内容。如果时区很重要,请使用正确的类型。这在 C# 和数据库中都是DateTimeOffset至少。以 ISO8601 格式发送日期,包括来自客户端的偏移量或时区。 -
@Ajay UTC 不是解决方案。夏季会发生什么?如果两个国家有不同的 DST 规则会怎样?下次埃及或俄罗斯决定在短时间内更改 DST 规则时会发生什么?
标签: c# sql-server timezone