罗兰在MATLAB的艺术

把想法变成MATLAB

时区和时区偏移量

彼得•帕金斯在发展,写这一个解释为开发团队和文档需要理解,以确保时区正确实施和解释。在他的允许下,我偷了它()与大家分享。

一个很常见的错误在谈到时区是混淆了从UTC时区与特定的偏移量。这是两件不同的事情。了解更多关于这个在MATLAB中,查看文档。时区包括

  1. 一个名字,像美国/ New_York
  2. 标准的抵消从UTC, 5小时
  3. 夏令时抵消,像+ 1小时
  4. 一条规则,确定当夏时制变化发生时,像“春天在3月的第二个星期日,11月的第一个星期日,在2:00am”
  5. 的历史这四个东西随着时间的推移,像“从1987年到2006年,这是第一个星期天4月和10月的最后一个星期天”,

还有时区偏移,像东部标准时间。这是抵消从UTC使用锚定一个特定的钟面。想象有人给你时间戳

时间戳=“5 - 11月- 2018 13:58:55”
时间戳= ' 13:58:55 5 - 11月- 2018 '

在现实世界中是什么意思?也许你和另一个人可能有一些公认的惯例,但总的来说,你不知道如果这意味着“纽约”,或“伦敦”,等等。你想添加一个偏移量,消除歧义,也许是这样的:

时间戳=5 - 11月- 2018 13:58:55凌晨”
时间戳= ' 5 - 11月- 2018年13:58:55凌晨”

但是人们喜欢文字比数字,所以通常是这样写:

时间戳=5 - 11月- 2018 13:58:55 EST的
时间戳= ' 5 - 11月- 2018年13:58:55 EST的

只要你能同意,意味着美国东部标准时间,而不是澳大利亚和巴西东部标准时间(无论是UTC-5,但仍然被当地人称为美国东部时间),你很好。从UTC 13:58:55抵消了5小时,或18:58:55 UTC。但是为什么不避免语言问题(法国加拿大人称之为HNE)说,“凌晨”。你是更好。

注意,所有z / z / x / x的事情你可以把一个datetime数组的显示格式吐出时区偏移量。时区是datetime的属性数组。可能会显示每个元素本身有不同的抵消,尽管(标准比夏令时)。

提供一个时间戳一个偏移量(或同意在一个按照惯例)帮助一个时间戳,但它不提供上下文算术和计算其他时间戳。你可能会使用收集的数据在纽约,或在图卢姆收集的数据(不遵守DST)。那么前两天以上的时间戳出去工作

fmt =“dd-MMM-yyyy HH: mm: ss z”;datetime (5 - 11月- 2018 13:58:55 EST的,“时区”,“美国/ New_York”,“格式”fmt)小时(48)
ans = datetime 03 - 11月- 2018 14:58:55美国东部时间

datetime (10月26日—- 2018 13:58:55 EST的,“时区”,美国/墨西哥坎昆的,“格式”fmt)小时(48)
ans = datetime 24 - 10月2018 13:58:55 EST

你可能会说,“哈,图卢姆,我希望,但真正得到。”But even in the US, this comes up.

datetime (10月26日—- 1998 13:58:55 EST的,“时区”,“美国/ New_York”,“格式”fmt)小时(48)
ans = 24——1998年10月——14:58:55 datetime
datetime (10月26日—- 1998 13:58:55 EST的,“时区”,“美国/印第安纳波利斯”,“格式”fmt)小时(48)
ans = datetime 24 - 10月1998 13:58:55 EST

你可能会说,“当然,每个人都拖出,老栗”,但这些事情很重要,必须是正确的。你猜怎么着?新英格兰的大部分或全部可能会改变他们的时区规则在未来几年,所以你最好习惯说类似美国波士顿/而不是美国东部时间。

我上面说的,是明确的,比美国东部时间凌晨,从语言的角度来看,这是完全正确的。但从上下文的角度来看,它实际上是更多的比是模棱两可的。有很多的地方,每年一次,或另一个指定他们的次UTC-5偏移量。芝加哥,例如,观察在美国叫什么中央标准时间。和大量的数据采集硬件对DST知道什么都没有,所以他们吐出时间戳等26 - 10月- 1998 13:58:55凌晨一年到头都。应该尊重你的计算,或尊重New_York DST规则,还是别的什么?(MATLAB支金宝app持用例的UTC-5时区——它不遵守DST转变,不会改变它的行为,因此它的名字只是其偏移量。)

所以你需要一个时区。但如果你只有指定时区(假设你醒来这意味着什么,你除了错误地指定一个偏移量),有一个问题如果你不指定一个偏移量。考虑这个时间戳

datetime (“04 - 11月- 2018 01:35:23”,“时区”,“美国/ New_York”,“格式”fmt)
ans = datetime 04 - 11月- 2018 01:35:23 EST

其他01:35:23那天,第一个提前一个小时,夏令时期间?

正确的方式把这些当你阅读时间戳数据是一个偏移量的需求。

datetime (04 - 11月- 2018 01:35:23 EST的,“时区”,“美国/ New_York”,“格式”fmt)
ans = datetime 04 - 11月- 2018 01:35:23 EST
datetime (“2018年04 - 11月01:35:23”,“时区”,“美国/ New_York”,“格式”fmt)
ans = datetime 04 - 11月- 2018年01:35:23美国东部时间

好吧,一年一次,在半夜,大不了的。但这些事情很重要,必须是正确的。你猜怎么着?没有一个偏移量,如果您正在使用数据从数据acq硬件不知道DST,也不添加一个抵消其时间戳,你被一个小时在你的数据的一半。

结论:时区,时区偏移量是两个不同的东西。指定一个偏移量(给你一个时间戳的确切含义,但没有提供上下文计算。除非你正在与“unzoned”时间戳,只有一个可能的意义,从只有一个数据源,您需要指定一个时区。美国东部时间并不是这样做的方式。

你需要掌握时区吗?和你有问题吗?让我们知道,没有为你工作在这里




发表与MATLAB®R2019b

|
  • 打印
  • 发送电子邮件

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。