将日期时间转换为儒略日期或 POSIX 时间
您可以转换 datetime
数组,以采用专门的数值格式来表示时间点。通常,这些格式会将时间点表示为自指定的起点以来经过的秒数或天数。例如,儒略日期是指自儒略周期开始以来经过的整天和小数天数。POSIX® 时间是指自 UTC(协调世界时)1970 年 1 月 1 日 00:00:00 以来经过的秒数。MATLAB® 提供 juliandate
和 posixtime
函数来将 datetime
数组转换为儒略日期和 POSIX 时间。
虽然 datetime
数组不必带有时区,但将“未设置时区的”datetime
值转换为儒略日期或 POSIX 时间可能会导致意外的结果。要确保获得预期的结果,请在转换之前指定时区。
在转换之前指定时区
您可以为 datetime
数组指定时区,但不一定需要执行该操作。实际上,datetime
函数默认情况下会创建一个“未设置时区的”datetime
数组。
为当前日期时间创建 datetime
值。
d = datetime("now")
d = datetime
25-Jan-2024 22:08:16
d
是根据您的计算机上的本地时间构建的,没有与其关联的时区。在许多情况下,您可能会认为可将未设置时区的 datetime
数组中的时间视为本地时间。但是,juliandate
和 posixtime
函数将未设置时区的 datetime
数组中的时间视为 UTC 时间,而非本地时间。为避免出现任何混乱,建议您避免对未设置时区的 datetime
数组使用 juliandate
和 posixtime
。例如,避免在代码中使用 posixtime(datetime("now"))
。
如果 datetime
数组包含不表示 UTC 时间的值,请使用 TimeZone
名称-值对组参量来指定时区,以使 juliandate
和 posixtime
正确解释 datetime
值。
d = datetime("now","TimeZone","America/New_York")
d = datetime
25-Jan-2024 22:08:16
作为备选方法,您可以在创建该数组后指定 TimeZone
属性。
d.TimeZone = "America/Los_Angeles"
d = datetime
25-Jan-2024 19:08:16
要查看时区的完整列表,请使用 timezones
函数。
将已设置时区和未设置时区的日期时间值转换为儒略日期
儒略日期是指前公历日历中自公元前 4714 年 11 月 24 日或前儒略日历中自公元前 4713 年 1 月 1 日中午起的天数(包括小数天数)。要将 datetime
数组转换为儒略日期,请使用 juliandate
函数。
创建一个 datetime
数组并指定其时区。
DZ = datetime("2016-07-29 10:05:24") + calmonths(1:3); DZ.TimeZone = "America/New_York"
DZ = 1x3 datetime
29-Aug-2016 10:05:24 29-Sep-2016 10:05:24 29-Oct-2016 10:05:24
将 D
转换为等同的儒略日期。
format longG
JDZ = juliandate(DZ)
JDZ = 1×3
2457630.08708333 2457661.08708333 2457691.08708333
为 DZ
创建未设置时区的副本。将 D
转换为等同的儒略日期。由于 D
没有时区,因此 juliandate
将时间视为 UTC 时间。
D = DZ;
D.TimeZone = "";
JD = juliandate(D)
JD = 1×3
2457629.92041667 2457660.92041667 2457690.92041667
比较 JDZ
和 JD
。其差等于 UTC 和 America/New_York
时区之间的时区偏移量(以小数天数计)。
JDZ - JD
ans = 1×3
0.166666666511446 0.166666666511446 0.166666666511446
将已设置时区和未设置时区的日期时间值转换为 POSIX 时间
POSIX 时间是指自 UTC(协调世界时)1970 年 1 月 1 日 00:00:00 以来经过的秒数(包括小数秒),忽略闰秒。要将 datetime
数组转换为 POSIX 时间,请使用 posixtime
函数。
创建一个 datetime
数组并指定其时区。
DZ = datetime("2016-07-29 10:05:24") + calmonths(1:3); DZ.TimeZone = "America/New_York"
DZ = 1x3 datetime
29-Aug-2016 10:05:24 29-Sep-2016 10:05:24 29-Oct-2016 10:05:24
将 D
转换为等同的 POSIX 时间。
PTZ = posixtime(DZ)
PTZ = 1×3
1472479524 1475157924 1477749924
为 DZ
创建未设置时区的副本。将 D
转换为等同的 POSIX 时间。由于 D
没有时区,因此 posixtime
将时间视为 UTC 时间。
D = DZ;
D.TimeZone = "";
PT = posixtime(D)
PT = 1×3
1472465124 1475143524 1477735524
比较 PTZ
和 PT
。其差等于 UTC 和 America/New_York
时区之间的时区偏移量(以秒计)。
PTZ - PT
ans = 1×3
14400 14400 14400
另请参阅
datetime
| timezones
| posixtime
| juliandate