MATLAB 基础知识 数据类型 时间和日期 将日期和时间转换为儒略日期或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
   03-Aug-2020 20:28:39

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
   03-Aug-2020 20:28:39

作为备选方法,您可以在创建该数组后指定 TimeZone 属性。

d.TimeZone = 'America/Los_Angeles'
d = datetime
   03-Aug-2020 17:28:39

要查看时区的完整列表,请使用 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

结冰架构

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值