datetime UTCLeapSeconds, 2秒的区别在闰秒边界

16个视图(30天)
我最近知道闰秒功能的新的R2014b datetime类,所以我做了一些简单的测试,没有得到预期的结果。我有什么地方做的不对或者是闰秒调整错了吗?
1例是两个日期周围没有闰秒6月30日,2013年,和使用UTC的时区:
> > t3 = datetime(2013、6、30日0,0,0)
t3 =
30 - 2013年6月,就是
> > t3。时区=UTC的
t3 =
30 - 2013年6月,就是
> > t4 = datetime (2013、7、2 0, 0, 0)
t4 =
02 - 7月2013就是
> > t4。时区=UTC的
t4 =
02 - 7月2013就是
> >秒(t4-t3) - 2 * 86400
ans =
0
两个86400的第二天。都很好。
2例是两个日期周围有闰秒的6月30日,2012年,和使用的UTCLeapSeconds时区:
> > t1 = datetime(2012、6、30日0,0,0)
t1 =
30 - 2012年6月,就是
> > t1。时区=“UTCLeapSeconds”
t1 =
2012 - 06 - 30 - t00:00:24.000z
> > t2 = datetime (2012、7、2 0, 0, 0)
t2 =
02 - 7月2012就是
> > t2。时区=“UTCLeapSeconds”
t2 =
2012 - 07 - 02 - t00:00:25.000z
> >秒(t2-t1) - 2 * 86400
ans =
2
所以24.000和25.000中出现的日期显示匹配的总数闰秒,应用通过这些日期(例如,看到 http://en.wikipedia.org/wiki/Leap_second )。这似乎匹配。但我看到的区别我得到2秒,而不是预期的1秒在这个应用闰秒边界。我失踪吗?我建立的日期或应用UTCLeapSeconds时区错误?还是别的什么?
第三例是两个日期周围有闰秒的6月30日,2015年,但宣布在未来,再次使用的UTCLeapSeconds时区:
> > t5 = datetime(2015、6、30日0,0,0)
t5 =
30 - 2015年6月,就是
> > t5。时区=“UTCLeapSeconds”
t5 =
2015 - 06 - 30 - t00:00:25.000z
> > t6 = datetime (2015、7、2 0, 0, 0)
t6 =
02 - 7月2015就是
> > t6。时区=“UTCLeapSeconds”
t6 =
2015 - 07 - 02 - t00:00:25.000z
> >秒(t6-t5) - 2 * 86400
ans =
0
这里宣布闰秒不占25.000(明显看t6日期而不是预期的26.000)。是什么让datetime函数的过程最新的闰秒调整吗?这需要一个表查找的一些背景,所以如何得到/保持更新吗?我没有看到任何的医生提到这一点。

接受的答案

彼得·珀金斯
彼得·珀金斯 2015年3月22日
编辑:彼得·珀金斯 2015年3月22日
詹姆斯在第二个实例,你减去2012 - 06 - 30 -从2012 - 07 - 02年t00:00:25.000z t00:00:24.000z。真的有86401 + 86400 + 1秒的差别,例如2 * 86400 + 2,因为一个闰秒,1 s diffference在《纽约时报》。我认为混乱之间的差异源于你所做的和:
> > t1 = datetime(2012、6、30日0,0,0,“时区”,“UTCLeapSeconds”)
t1 =
2012 - 06 - 30 - t00:00:00.000z
> > t2 = datetime (2012、7、2 0, 0, 0,“时区”,“UTCLeapSeconds”)
t2 =
2012 - 07 - 02 - t00:00:00.000z
> > t2 - t1
ans =
48:00:01
这是48小时和1。我必使调查报告从“unzoned”转换到“UTCLeapSeconds”,以及为什么你得到这些额外的秒。
第三,你运行14 b,这是在2015年闰秒甚至宣布之前发布。有一个补丁发布1月初,最近15已经补丁。你是对的,需要有更多的交流关于如何更新,尽管鉴于事务的当前状态,它甚至不清楚会有闰秒。
希望这个有帮助。
9日评论
彼得·珀金斯
彼得·珀金斯 2015年5月6日
詹姆斯,我只看见了,对不起,漫长的等待。如果我理解正确的问题,目前问题是“UTCLeapSeconds”需要一个特定的显示格式。你可能做的两件事之一:
1)datetime构造函数调用来执行转换在一行:
> > t = datetime (2012 7 2 0, 0, 0,“时区”,UTC的)
t =
02 - 7月2012就是
> > tl = datetime (t)“格式”,“uuuu-MM-dd“T”HH: mm: ss.SSS“Z”,“时区”,“UTCLeapSeconds”)
tl =
2012 - 07 - 02 - t00:00:00.000z
2)或一次设置的属性:
> > t = datetime (2012 7 2 0, 0, 0,“时区”,UTC的)
t =
02 - 7月2012就是
> > t。格式=“uuuu-MM-dd“T”HH: mm: ss.SSS“Z”;
> > t。时区=“UTCLeapSeconds”
t =
2012 - 07 - 02 - t00:00:00.000z
希望这个有帮助。我认为如果你是工作在闰秒,你开始呆在那里。我有兴趣听到你为什么来回转换。不是说你做错什么,只是想明白。

登录置评。

更多的答案(2)

史蒂夫·艾伦
史蒂夫·艾伦 2015年3月24日
24秒不是每天的时间调整。问题是底层的时间尺度是否已经计算的所有运行SI秒对应大的电台广播,还是忽略一些SI秒以保持同步日历天计算的平均太阳时面值的UTC。如果底层的时间尺度计算的所有SI秒那么它必须同意POSIX-mandated解释UTC面值的之前和之后一个闰秒。是的,这是不可避免的混乱,因为没有国际标准的IANA tz“正确”的时区,但另一方面,“正确”的解释是唯一一个真正符合实际的历史秒已被广播的国际建议时间信号时计算由于所有公民时钟有面值1970 - 01 - 01 - t00:00:00。
1评论
詹姆斯Tursa
詹姆斯Tursa 2015年3月24日
“…底层的时间尺度……”
这就是重点, 没有潜在的时间尺度。它是unzoned (”)。的 只有 问题是如何处理这种由赋值直接当应用一个新的时区。是符合所有其他时区的行为,应用“UTCLeapSeconds”不应该做时间调整。

登录置评。


安德鲁Janke
安德鲁Janke 2018年5月31日
嗨,各位。我是一个软件开发人员来自Java / c# / Joda-Time / Noda-Time,这行为是令人困惑的我。
有中央Matlab datetime API如何处理文档页面闰秒?我找不到任何地方通过doco。
1评论
彼得·珀金斯
彼得·珀金斯 2018年5月31日
安德鲁,跳秒MATLAB是“选择”。我的经验是,大多数人不希望自己的时间计算考虑它们,除非你选择,MATLAB表现得好像他们从来没有发生过。你选择通过设置时区属性“UTCLeapSeconds”(这不是一个真正的“时区”在美国/ New_York是相同的感觉,但这是它是如何做)。除此之外,没有什么特别的。

登录置评。

类别

找到更多的在日期和时间帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!