nodatime - 与 NodaTime 一起使用的其他软件包
问题描述
我正在更新一个应用程序以使用NodaTime来修复我们的数据和流程的许多现有时间问题。
我需要从发送 IANA 时区名称的移动应用程序中解析时区。我需要支持使用自定义偏移量(即硬编码-04:00)转换为UTC。我可能需要也可能不需要支持 Windows 时区名称。
对于所有这些,我想知道我是否需要额外的软件包。TimeZoneConverter和TimeZoneNames如何与 NodaTime 一起工作?我应该与 NodaTime 一起使用其他附加软件包吗?
我们的最终目标是让所有数据以 Utc 格式保存,并转换为/从用户时间转换,仅用于显示或接受用户输入。
解决方案
据我所知,您不需要任何额外的软件包来解决这种情况。
- 对于 IANA ID,只需使用
DateTimeZoneProviders.Tzdb
- 对于“原始偏移”ID,您可以使用任何时区提供程序,要求提供“UTC+01:00”等形式的 ID(因此您需要添加“UTC”前缀。)
- 对于 Windows 区域映射,您可以使用
TzdbDateTimeZoneSource.Default
获取默认的 TZDB 信息,然后使用该WindowsMapping
属性获取WindowsZones
可用于映射的对象。
TimeZoneConverter
最后一个要点可能更容易使用,但这不是必需的。它提供的 IANA ID应该适用于 Noda Time。
TimeZoneNames
更多关于向用户显示时区名称。如果你不需要这样做,你可能不需要这个包。
请注意,将所有数据保存为 UTC可能是一个非常糟糕的主意 - 如果不了解您的应用程序的更多信息,就很难判断。如果您只处理过去的值,或者它们是固定的瞬间,那很好。但是,如果您允许用户安排未来的事件,我会存储用户给您的值。这是为什么...
假设用户说他们想在 2021 年 12 月 1 日上午 9 点为欧洲/巴黎安排一个活动。如果你现在将它转换为 UTC ,你最终会得到 2021-12-01T08:00Z,因为当前时区规则说巴黎将于 2021 年 12 月为 UTC+1。
但是,从现在到 2021 年,法国完全有可能将其时区规则更改为“永久日光时间”,即全年 UTC+2。届时,您的 UTC 值 2021-12-01T08:00Z 将对应于给定日期的巴黎上午 10 点 - 与用户指定的相反。
也可以转换为 UTC ,这样您就可以创建一个完全有序的数据视图,只要您保留足够的信息以在每次有新时区数据时再次执行该转换。
正如我所说,这对您来说可能不是问题,但值得知道的是,“始终以 UTC 存储所有内容”的“公认智慧”对于所有情况来说确实不是一个好建议。
推荐阅读
- android - Sunable 可以在 Playstore 上上传签名的 apk
- compare - 通过命令行比较 2 个 RPT 报告
- typescript - 从类型参数中获取类型的补码
- devexpress - DxDataGrid 自定义寻呼机
- python - SQLAlchemy 在对象持久化到数据库之前评估关系
- python - 如何在 BeautifulSoup 对象的标签中找到不在标签中的字符串模式
- python - 在 Pandas Python 中按两列对值进行排序
- react-native - 如何在 React Native 中编写以下形状?
- javascript - 将 figma 文件转换为图像格式
- pine-script - 复选框切换不匹配输入