sql-server – 如何在SQL Server中正确处理TimeZone?
我的当地开拓处事器位于中东,但我的出产处事器位于英国. 我必要在他们的时区向用户表现日期.譬喻,假如用户在沙特阿拉伯,那么我必要按照沙特阿拉伯名目表现时刻. 我应该建设一个名为TimeZone的新数据库表并以UTC名目生涯时刻吗? 办理要领不幸的是,没有快速办理这个题目.应用措施的国际化应该是第一次计划接头的一部门,由于它确实涉及很多差异规模的焦点,包罗日期/时刻较量和输格外式.无论怎样,为了实现“正确动作”的轨道,必需随时刻存储时区信息.换句话说,假如没有(a)包罗时区其时的UTC偏移(注1),可能(b)确保插入这些值的全部逻辑起首转换为a,则熟悉到日期/时刻20130407 14:50是没故意义的.某些牢靠偏移(很也许是0).没有这些对象,两个给定的时刻值是无法相比的,数据是糜烂的. (趁便说一句,后一种要领正在玩火(注2);不要这样做.) 在SQL Server 2008中,您可以行使 这使桌面型应用措施变得轻易,由于这些平台凡是具有自动将日期/时刻地区转换为当地时刻然后名目化输出的机制,全部这些都基于用户的地区配置. 对付Web,这是一种固有的断开毗连的系统布局,纵然正确配置了后端数据,它也会更伟大,由于您必要有关客户端的信息才气举办转换和/或名目化.这凡是通过用户首选项配置完成(应用措施在输出之前转换/名目化事物),可能只是为每小我私人表现具有沟通牢靠名目和时区偏移量的内容(这是Stack Exchange平台当前所做的工作). 你可以看到假如没有正确配置后端数据,很快就会变得伟大和hacky.我不提议你选择这些路径,由于你最终会碰着更多题目. 注1: 时区的UTC偏移量不牢靠:思量地区的UTC偏移量加上或减去一小时的夏令时.地区的夏令时也会按期变革.因此,行使datetimeoffset(或其时的当地时刻和UTC偏移的组合)可以得到最大的信息规复. 条记2: 这是关于节制数据输入.固然没有简朴的验证传入值的要领,但最好逼迫执行一个不涉及计较的简朴尺度.假如民众API祈望包括偏移量的数据范例,则挪用者将清晰该要求. 假如不是这种环境,挪用者必需依靠文档(假如他们读取它),可能计较不正确等等.当必要偏移时,失败/错误模式更少,出格是对付漫衍式体系(可能乃至只是在差异处事器上的web /数据库,如下所示). 无论怎样,存储偏移可以一举两得;纵然此刻不必要,也可以在须要时行使.确实,它占用了更多的存储空间,但我以为这是值得的衡量,由于假如数据从未被记录在首位,那么数据就会丢失. (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |