【问题标题】:Display a list of world timezones in flutter在颤动中显示世界时区列表
【发布时间】:2021-08-25 14:58:28
【问题描述】:

我讨厌时区,但这次我离不开它们。我正在构建一个需要预先选择用户时区但仍允许更改它的颤振应用程序。 我应该显示哪些时区?

在做了一些研究和查看示例之后,我注意到了 2 个模式

  • 将时区显示为城市名称。前“美国/丹佛”
  • 将时区显示为时区。前“山地标准时间”

我决定使用城市名称示例,因为它最容易编码。此模式在“timezone”flutter 包、iOS 和 Android 设备中使用,并在我使用“flutter_native_timezone”包查询用户的时区时返回。然而,这个实现从测试用户那里产生了很多负面反馈。大多数人都希望在列表中看到山地标准时间。他们还说,如果我使用城市名称作为时区,如果它们共享相同的时区,我应该选择最大的城市。例如,America/Boise 和 America/Denver 不应一起显示,因为它们属于山区时间,应该包括最大的。

有人能解释一下我该如何解决这个烂摊子吗? 1 个国家/地区可以手动执行此操作,但为世界上所有国家/地区执行此操作非常繁琐且容易出错。我想使用时区模式,但这需要某种时区解析功能,可以将“美国/丹佛”转换为“山地标准时间”,反之亦然。

【问题讨论】:

    标签: flutter timezone


    【解决方案1】:

    我建议将canonical TZ database names 用于时区。

    你检查过timezone package吗?

    此包提供 IANA 时区数据库和时区感知 DateTime 类 TZDateTime。

    他们提供三种不同的 IANA 数据库变体:

    • 默认值:不包含已弃用和历史区域 “US/Eastern”和“Etc/UTC”等例外情况;这大约是 75% 所有数据库的大小。
    • all:包含来自 IANA 时区数据库的所有数据。
    • 10y:默认数据库被截断以包含来自 5 的历史数据 几年前到未来 5 年;这个数据库大约是 25% 默认数据库的大小。

    【讨论】:

    • 是的,我使用的是 timezone 包,但它以“America/Denver”的格式提供了 400 多个城市名称。我需要找到一种方法来减少它以排除同一时区下的城市,如美国/丹佛和美国博伊西,只保留较大的城市或将其转换为“山地标准时间”等时区
    • 我肯定会尝试为时区实现规范的 TZ 数据库名称。目前无法帮助实施。
    • 规范名称会很好用,但我需要一种方法来过滤掉无用的时区。例如,根据您分享的 Wikipedia 文章,America/Boise 是规范时区;但是,您不会在 android 设备上找到这个时区,因为应该使用 America/Denver。
    • 这个帖子有帮助吗? stackoverflow.com/questions/26169888/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多