拨开时间的迷雾( 二 )
- 问题2:客户问这个问题 , 十有八九是以为时区只影响时间 , 忘记了“日期变更线” , 可以举一个极端的例子 , 举例子的时候时间一定要带上时区 。
本文插图
- 问题3:这个问题非常有挑战 , 用户都说到“数据库”了 。 看起来不把时间戳讲一讲是搞不定了 , 实际上客户真的不太理解时间戳 。 时间戳、绝对时间都非常的技术 , 客户接受不了 。 当需要表达时间戳的时候 , 我一般说成是格林尼治时间 , 我们把所有时间都转换成0时区的时间保存了 , 这样比较方便比较 。
答:这个过程就像2+8=10 , 但是通过10 , 无法找到2和8 。 计算机在存储绝对时间时做了类似的事情 。
总结下来和客户沟通的主要手段就是:统一语言加举例子 。
程序员的时间
常见问题
1.java.util.TimeZone和java.time.ZoneId , 这两个东西干什么的?有什么区别?
- TimeZone是JDK7以前的原生时区 , ZoneId是JDK8以后的原生时区 。 他们功能是一样的 , ZoneId是从joda-time到jdk里面来踢场子的 。
- TimeZone提供了toZoneId() , ZoneId没有提供toTimeZone() , 但是TimeZone提供了getTimeZone(ZoneId),看来ZoneId比TimeZone更为基础 , 推荐使用ZoneId 。
- 在提到时区的时候 , 我们会想到Australia/Canberra或者UTC+11:00 , 但是这两个东西并不等价 。 UTC+11:00其实是偏移量 , 与任何国家不相干 , 对应固定的经度区间,157度30分~172度30分;Australia/Canberra是行政时区 , 采用相同时区的地区 , 在地理位置上的偏移量可能不同 , 中国跨越了5个时区 , 但是全国还是统一使用UTC+8;有些国家的政策也可能调整 , 具体的偏移量也会变 , 采用夏令时的地区每年都会变 , 具体什么时间调整也是政策决定的 。
- 下面demo中同一个Zone的两个时间2015-10-04 01:00和2015-10-04 03:00 , 使用了不同的时区 , 看起来相差两小时 , 实际上仅仅相差1小时 。
Start:2015-10-04T01:00+10:00[Australia/Canberra] End:2015-10-04T03:00+11:00[Australia/Canberra] Duration:PT1H所以使用类似Australia/Canberra的这种ZoneRegion才能得到真正可靠的本地时间 。
3.ZonedDateTime vs OffsetDateTime
- ZonedDateTime提供了toOffsetDateTime(),OffsetDateTime也提供了toZonedDateTime() , 他们互惠互利 , 互通有无 , 和睦相处 。 但是 , 一个ZonedDateTime在经历了toOffsetDateTime()、toZonedDateTime()再回到ZonedDateTime的时候已经不是原来的ZonedDateTime了 , 它把它原来的Australia/Canberra弄丢了 。 所以不要随便toOffsetDateTime() 。
推荐阅读
- 免疫力|科学家发现免疫系统与长相之间的关系:越健康的人越有吸引力
- 酒店|男子隔离被安排到花果山主题酒店 房间的山洞风格让网友尖叫:太逼真
- 演讲|罗振宇2022跨年演讲《时间的朋友》来了:首次无观众演讲 已紧急退票
- 男孩在隔离酒店住了7天,离开时留下字条……
- 微软|索尼微软两巨头接连表态:将重新评估与动视暴雪之间的合作关系
- 人体器官捐献协调员:奔走在生死间的“摆渡人”
- 烟台抗疫,这一幕破防了!凌晨4点,她蜷缩在储物间的纸箱里睡着了
- 高铁|时速600公里高速磁浮列车来了:填补高铁、飞机之间的空白
- 电子烟|拨开校园周围的电子烟迷雾 像是一个个摘不掉的瘤子
- 61年!全国失散最长时间的兄弟团圆了
