我们有一个用于生成报告的库。它从数据文件(SQL、XML、JSON等)中读取,日期时间可以在用户编写的方程式中进行修改,然后按照报告输出的指定格式进行格式化。
在方程式中使用可以添加时间跨度,获取值的部分,如“if date.month == 2”,以及几乎所有Excel中的日期时间宏。
由于数据可以是JSON(或没有模式的XML),日期时间可以是“2019-01-25”、“2019-01-25T14:32:23”、“2019-01-25T14:32:23.12345”、“2019-01-25T14:32:23Z”或“2019-01-25T14:32:23Z-0500”(最后两个也可以有“.12345”)。
如果没有时区偏移量,我们假设日期时间为UTC。虽然这应该是正确的,但通常并不是,它是本地时间,但在使用方式上并不重要。因此,除非指定了时区偏移量,否则将其设置为UTC可行(到目前为止我们一直使用Date)。
在方程式中使用可以添加时间跨度,获取值的部分,如“if date.month == 2”,以及几乎所有Excel中的日期时间宏。
由于数据可以是JSON(或没有模式的XML),日期时间可以是“2019-01-25”、“2019-01-25T14:32:23”、“2019-01-25T14:32:23.12345”、“2019-01-25T14:32:23Z”或“2019-01-25T14:32:23Z-0500”(最后两个也可以有“.12345”)。
如果没有时区偏移量,我们假设日期时间为UTC。虽然这应该是正确的,但通常并不是,它是本地时间,但在使用方式上并不重要。因此,除非指定了时区偏移量,否则将其设置为UTC可行(到目前为止我们一直使用Date)。
第一个问题 - 我应该使用哪个类来保存这个值?根据我所了解的,我认为应该使用ZonedDateTime,但也可能是Instant?
第二个问题 - 当我需要执行像将3天添加到日期时间之类的操作时,我应该使用什么类来表示时间段?
第三个问题 - 是否有一些解析器可以解析我上面列出的所有不同字符串?或者我需要调用String.contains()方法来确定格式,然后根据格式进行显式模式匹配?如果是这样,使用哪个类?
OffsetDateTime
比ZonedDateTime
更合理。 - assylias2019-01-25T14:32:23Z-0500
:你需要知道5小时的偏移量吗?或者你只想保持相同的UTC时间,即2019-01-25T19:32:23Z
?还是你更喜欢2019-01-25T14:32:23Z
(这不是相同的瞬间,但是是相同的本地时间)? - assylias