3. 技术专题 - 时间、日期、时区

  • 时间、日期
    • 注意有的组件的每周、每年的第一天的设置、算法会不同
    • 如iso week date根据每年第一周的周四在去年还是今天,来判断这一周属于去年还是今年
    • 有的组件可以设置每周的第一天是周日还是周一,也可以通过设置的locale aware来判断?
  • 时区
    • GMT和UTC其实类似,GMT并不是指本地时区
    • 欧美有夏令时,时区偏移可能会变
    • 时区名称如'Asia/Shanghai','Asia/Urumqi','Europe/Berlin'等,代表了不同的UTC/GMT偏移。
    • 时区缩写如EDT代表(美国)东部夏令时、CCT代表中国沿海时间(北京时间)等。
    • 时间点或者说timestamp本身是没有什么时区不时区的,凡是附加这timezone的,都是自己封装的对象,只不过该对象在设置时区时有可能会自动计算偏移来改变时间点。
    • 数据库中的数据一定要有明确的时区信息或约定
      • 一般要存UTC+0的时间,然后使用者自己去转时间。
      • 或者存含时区信息的格式,然后使用者自己去把拿到的时区的时间转成自己想要的时区的时间,如"Mon May 25 2020 00:00:00 GMT+0800 (China Standard Time)"。
    • 一定要想清楚你要处理的是同一时间点的不同时区显示还是就是不同的时间点
      • 比如今天的UTC的0点和今天的Local的0点,这是两个不同的时间点,假设今天是中国的1月1日,那么UTC的0点是UTC的1月1日0点,Local的0点是Local的1月1日的0点,这完全是两个时间点,UTC得0点相当于Local的早上8点。
      • 假设今天是中国的1月1日,今天的Local的0点,表示成UTC的时区的话是12月31日16点,但其实都是一个时间,只是不同的显示,是世界上不同地点的同一时间点的不同显示。
    • 注意UTC和Local有可能完全不是一天,因此可能在不同的周、月份、年,因此如果要计算当前周、月、年的数据,一定要考虑当前使用哪个时区来判断。
  • 时间及时区格式
    • 不含时区信息的时间格式
      • timestamp,如1528170264101。
      • ISO8601字符串格式:如"2020-05-24T16:00:00.000Z"。
        • 貌似即使是2点,也不能把前面的0省掉,比如“2020-05-24T2:00:00.000Z”是错误的,如果在浏览器的console中输入new Date(“2020-05-24T2:00:00.000Z”)会报错说Invalid Date
    • 含时区信息的时间格式
      • ISO8601字符串格式?如"2020-05-24T16:00:00.000Z+08:00"?有吗?
      • (JavaScript的DateTime)本地化的时间格式。某些组件会使用这个格式,可以使用toISOString()函数转成ISO字符串格式:如"Mon May 25 2020 00:00:00 GMT+0800 (China Standard Time)"
    • ISO8601时间和时间间隔
      • ISO8602时间
        • 通常为yyyy-MM-dd’T’HH:mm:ss’Z’
      • ISO8601时间间隔
      • 可用在一些配置文件中,或者作为一些字段的值,代表间隔多久做某些操作
        • 如PT60s和PT60M,分别代表每60秒和每60分钟

posted on 2020-01-17 10:56  碎羽love星谊  阅读(300)  评论(0编辑  收藏  举报

导航