选择合适的 Noda 时间结构

Selecting appropriate Noda time structures

我有以下数据,我正在使用 .net time 和 运行 查询时区和跨度问题。我被推荐使用 Noda Time.

"MarketStates": {
    "dataTimeZone": "America/New_York",
    "monday": [
      {
          "start": "04:00:00",
          "end": "09:30:00",
          "state": "premarket"
      },
      {
          "start": "09:30:00",
          "end": "16:00:00",
          "state": "market"
      }
    ],
        "holidays": [
        "1/1/1998",
        "1/1/1999",
        "1/1/2001"
    ],
    "earlyCloses": {
        "7/3/2000": "13:00:00",
        "7/3/2001": "13:00:00"
    }
}

我正在写一个函数 IsMarketOpen 提供一个时间来测试,上面的 MarketStates json 数据库 - 如果当前时间是 returns true市场开盘,如果节假日或提前收盘则为假。

对于市场状态(monday 以上)我将使用 LocalTime

对于 earlyCloses 我打算使用 ZonedDateTime

对于进入此方法的时间,我将使用 ZonedDateTime

对于holidays,我需要保留时区吗?我找不到 ZonedDate,只有 OffsetDate or LocalDate?

总而言之,我应该保留所有内容 ZonedDateTime(因为我在上面的 json 数据库片段中指定了时区),还是使用 LocalDateTime 然后执行 conversion/testing 在那个时候?

以上问题请多多包涵,没想到时间这么辛苦,结构选择需要指导,如果需要额外的上下文,我会根据评论进行调整。谢谢。

你的earlyCloses看起来真的是Dictionary<LocalDate, LocalTime>,而holidaysList<LocalDate>。 (附带说明一下,它没有使用 ISO-8601 作为日期格式,这太糟糕了……我不知道那些提前关闭是 7 月 3 日还是 3 月 7 日。)

时区由 dataTimeZone 指定,但我建议在模型中将其保留为字符串,并在需要时将其转换为 DateTimeZone

我要说的主旨是,我鼓励您使直接模型中的值(从 JSON 加载并保存到 JSON)与实际存储在JSON。你可以在那个模型周围有一个包装器,它(例如)将早期关闭转换为 ZonedDateTime 值......但我通常发现保持“普通模型”简单非常有用,所以你可以立即猜测JSON 中的表示只是通过查看它。