当前位置: 首页 > 网络应用技术

一篇文章了解全球化系统的日期和时间处理

时间:2023-03-06 21:38:41 网络应用技术

  太长;没有阅读:

  日期始终是计算机系统中简单性的问题,但经常会爆炸。

  例如,每隔几年,“千年昆虫问题”的各种变体通常会爆炸,通常是因为系统不设计系统开头的日期和时间的数据存储方法,或者是因为系统的生命周期或时间的生命周期产品设计被低估了,导致选定的数据结构还不够。

  千年昆虫问题:

  年长的程序员知道数千年的问题。在2000年之前,许多系统以两位数为代表年份,因此199是它可以表达的最大价值。因此,在1999年之后的一年中,这些系统中没有定义,并且那里没有定义甚至可能是各种各样的奇怪情况,例如“ 1900”,“ 1:00”,“ 19:0”(为什么?感兴趣的读者can can can can the the the the the the the the the of the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the the。

  如果“千年蠕虫”是由于时间维度缺乏前向设计而引起的,那么另一种缺乏前瞻性问题是空间维度,即产品全球化和跨时间区域带来的问题。

  在全球产品中,如果时间的处理不遵循统一的标准,则整个系统将淹没难以理解和维护的时间转换。各个接口的对接文档必须解释:“这个接口是什么时区?您需要处理什么?”如果需要在跨国计算机室中部署后端服务,因为服务器的时区不同,您需要这样做,您需要做到这一点。大量的转换。

  不幸的是,在大多数情况下,产品一开始就不会具有“全球化”属性。因此,在开始时,生产和研究团队将不会关注全球化的设计,并且很容易使缺乏前进- 看设计问题。

  在正常情况下,我们不鼓励“过度的设计”。但是,由于技术时间是实现前瞻性时间计划的技术时间,日期的设计不惧怕“过度”。高的;但是,如果一开始设计不够,那么后来的升级和数据迁移工作将伤害骨骼。

  在微服务之间和前端之间,建议使用字符串传递日期和时间。字符串清晰易于阅读,易于人为地调节,并且带来的费用通常是完全可以接受的。大量数据,建议考虑使用UNIX Timestamp。)

  如果您使用字符串,请不要自己发明格式。有一个非常明确的国际标准:ISO 8601(Wikipedia:https://en.wikipedia.org/wiki/iso_8601)

  以下示例是符合规格的通用格式:

  请注意,MySQL中使用的字符串格式(例如2022-02-09 12:36:42)不符合规格,也不建议使用。

  在处理时间日期的相关对象的处理中,不同的数据库大不相同。此处是mysql,因为坑不小。

  MySQL的DateTime数据在存储时不包括时区信息,因此阅读时不会更改任何时区。

  同时,每个MySQL连接会话都有“会话时间区域”的概念,但是此概念仅影响诸如mySQL等功能的行为,并且对已保存在数据中的DateTime没有影响。

  例如:

  每种语言通常提供本机DateTime数据类型来表达绝对日期和时间,所有语言都支持上面的ISO 8601规范的分析和格式。

  在处理相对时区时,各种语言通常使用操作系统时区数据库转换为绝对时区。时区数据库需要由网络下的操作系统定期更新。

  UNIX时间戳可用于存储,计算和传输,可以将其描述为通用。它不适合表达周年纪念日。

  它指示了通过数值时间的UNIX时期时间(定义为1970-01-01T00:00z)的绝对时间秒差异。

  当使用UNIX Timestamp时,您应该特别注意适当的数值类型,这将影响时间表示的范围。没有注意,您可以种植下一个新的千年错误。

  根据不重要或不丢失的原则,我们可以根据下表将产品中的所有日期和时间对象划分:

  请勿指示时区,不需要根据用户所定位的时区进行更改。用户的时区②表示世界上唯一的时间点④表示世界。理解重复的时间存在没有存在的场景下解释了这五个场景。

  信息量包含“年,月,日常时间区域”。这样,您可以在历史悠久的河流中充分确定贵族时间。这段时间是完全客观的,与用户的地理位置无关,与服务器的地理位置无关,与任何事物无关。

  在产品性能方面,通常根据观看者所在的时区进行调整时区。

  例如:

  它包含“年,月,每天的时间”。因为没有时区信息,所以它不能确定准确的时间点,而只是在特定情况下意味着。

  SO称为特定的情况是因为业务场景包含时区的信息,并且是公认的共识。因此,由于在时区域上达成共识,因此,它基于本质上表达了绝对的时间。无需根据查看器的时区调整时间显示。

  例如:

  与前两个类别相比,删除“日期”信息以描述重复的时间表。它可以指向时区或不指示时区,但要了解时区的共识。

  例如:

  日期对象几乎只有一个有意义的目的:周年纪念日/节日。它不包括时区信息。

  据认为,“日期”只能用于“周年纪念日”,有些绝对可以使用。但是我确实检查了很多信息,而且我没有看到使用非 - “周年纪念日”的任何日期。

  例如:

  在产品反射方面,无需根据时区显示调整日期。从本质上讲,“周年纪念日”的逻辑实际上是由人脑的严格性引起的习惯。它不是严格的,也不是客观的。它不包括时区信息,只是为了满足这种非棘手的习惯。

  如上所述,日期对象不能包括时区。您可能会问,我需要说“北京时间,2022年3月22日”?答案是:这不是日期,而是“精确度较低的绝对时间”。

  在许多情况下,当您想使用日期时,这可能是“准确度的绝对时间”。在飞行书籍的业务中,经常会遇到这个场景。

  例如,美国的一名同学和日本的同学都于2022年3月22日从公司辞职,并在北京的同一人力资源中辞职。

  员工理解的最后一个工作日2022-03-22

  员工理解2022-03-23 00:00:00(各自当地时间)的有效时间

  北京2022-03-23 13:00 +08002022-03-22 23:00:00 +0800出发系统的绝对时间(UTC)2022-032022-03-23 05:00 UTC2022-03-22 15:00:00 UTC可以看出,从我们用户的角度来看,“事件的日期”实际上是我们忽略时间的时间的准确性。产品的全球化,我们通过一些默认的简化(例如一直填充到00:00:00)忽略了时间准确性问题。一旦您面对产品的全球化,您就需要弥补时间并提高准确性。

  需要根据特定产品表格来考虑和定义时间和提高准确性的方法。

  例如,在上述出发方案中,有必要补充公司的出发定义。可以是当地时代或一天中的时间,例如17:00:00,可以是23:59:59。

  另一个例子,对于交叉团体的业务,例如同学从美国的领导人到日本领导者的上级报告线例如公司总部的时间。

  适用于上述四个场景。

  UTC时间表示所有背端接触的接口中的时间对象。

  同时,所有后端都使用UTC时间在存储,计算和传输时间时。在DB存储时间内,时区信息将被抛弃。因此,应该丢失的时区是每个人都清楚同意的不道德的时区,即UTC.在这种方式上,DB中的所有时间领域都没有歧义。

  接口内的时间(例如时间)应转换为UTC,然后安装。如果直接使用MySQL函数,则应确保MySQL会话的时区设置正确。

  负责处理前面或BFF的用户输入,以及向客户显示的时间。包括两个步骤:

  以上两个点必须在产品设计中清楚地定义,并且不得模糊。

  不要为Zhen'er举起酒吧:

  适用于上述⑤,周年纪念场景。

  输入或显示时,请勿处理日期。日期对象直接存储在DB中。

  只有真正的周年纪念日才能使用此方法,应该非常谨慎。例如,保留联系人的联系人。

  使用绝对时间差来指示时区,例如:“ EAST 8区”表示比世界协调时间(UTC)早8小时的时区。这是一个客观的时区。

  很多时候,我们担心城市或地区的时区。例如:亚洲/上海是中国时间;三个字母EST的缩写代表美国东部的标准时间。注意,地理位置定义的时区之间的时差将改变,并且变化的因素包括:可能受到当地政策的影响,或者夏季时间将受到影响。被影响。

  在历史时期,地理时区可以确定客观时区,因为没有人会重新定义已经过去的时间。

  对于将来的时间,地理区域无法确定客观的时区。因此,如果根据非吸毒时区达成协议,则可能会更改。此外,我们的产品需要考虑处理此问题改变。

  例如,中国员工启动了“每天8点”的跨国会议,因此在美国,由于夏季的变化,冬季会议的时间与夏季不同。“由美国员工发起的早晨,由于美国夏天的变化,中国员工的时间也不同于夏季和冬季。

  在夏天,一些国家将调整一个小时的时间(提前一小时)。这表明在同一地区,在冬季和夏季使用不同的绝对时区。

  这是因为夏天在白天很长,并且在调整后的第二天的早期,因此下班后每天都有较长的时间。凌晨9点开始工作,但整个社会提前10点重新定义了10点。

  一个具体的例子,在美国:

  在2021年3月14日上午1:59:59之后,第二个是上午3:00:00。。根据RFC5545的兼容性,如果时间表大约是这个不存在的时间,则将考虑3:10:00。

  在2021年11月7日的1:59:59之后,第二个是上午1:00:00。根据RFC5545的说法,为了避免歧义,当您看到这次时,您会认为这是时间点。重叠的第二个小时。

  https://en.wikipedia.org/wiki/iso_8601

  https://www.rfc-editor.org/rfc/rfc3339

  https://datatracker.iestf.org/doc/html/rfc5545

  https://stackoverflow.com/questions/2532729/daylight-saving time-nd time-zone-best-practices

  https://medium.com/@vivekmadurai/how-deal-date-ndate-across-pime-zones-zones-39b1bd74747f35

  https://medium.com/@vivekmadurai/how-deal-date-ndate-across-pime-zones-zones-39b1bd74747f35

  https://docs.microsoft.com/en-s/dynamics365/customerngagement/on-premises/customize/behavior-date-field?view-9-1

  https://www.timeanddate.com/time/change/usa?year=2021(上下移动全部)

  我们来自飞行书《飞行书人类套件》团队。目前,我们已经在北京,深圳,上海,武汉,杭州,成都,广州,广州和Sanya建立了一个办公区域。我们关注的产品领域主要是在企业体验管理软件上,包括HCM系统,例如飞行书籍等HCM系统OKR,《飞行书籍表演》,《飞行书籍招募》和《飞行书》。与我们的报销和其他系统一起加入我们。

  开发工程师/高级后端开发工程师

  职位描述

  工作要求

  内部推定代码

  官方网站交付:

  https://jobs.tedance.com/referral/pc/position/detail/?token=mtsxnjuwnjm4ozy5ndg5nzu0odaymza7nza7nza1mdm3mjgzodc3nty5na