2026a

# convertTo


将 DateTime 值转换为数值表示

函数库: TyBaseEx

# 语法

X = convertTo(D,dateType)
X = convertTo(D,"epochtime";Key=value)

# 说明

X = convertTo(D,dateType) 将 D 中的 DateTime 值转换为 dateType 指定的数值表示,并返回数值数组。例如,如果 dateType 是 "posixtime",则 convertTo 会将 D 的每个元素转换为自 UTC(协调世界时)1970 年 1 月 1 日 00:00:00 纪元以来经过的秒数。

所有数值表示都说明相对于某时间点(称为纪元)的日期和时间。计算机通常用自指定纪元起计的秒数或时钟计时单元数来测量时间。示例


X = convertTo(D,"epochtime";Key=value) 使用名称-值对组参数指定纪元和每秒的时钟计时单元数。例如,如果您将纪元指定为 k = value,则 X 中的每个值表示 2001 年 1 月 1 日午夜之前或之后的秒数。示例

# 示例

将日期和时间转换为 Excel 和 .NET 时间
创建一个由 DateTime 值组成的数组。
using TimeZones
using TyBaseEx
D = DateTime.(2019, 10:12, 1, 12, 0, 0)
D=
3-element Vector{DateTime}:
2019-10-01T12:00:00
2019-11-01T12:00:00
2019-12-01T12:00:00

将 D 转换为表示 Excel 日期数值的双精度值数组。

X = convertTo(D, "excel")
X=
3-element Vector{Float64}:
 43739.5
 43770.5
 43800.5

将 D 转换为一个将日期和时间表示为 .NET 时间的数组。

X = convertTo(D, ".net")
X=
3-element Vector{Float64}:
 6.3705528e17
 6.37082064e17
 6.37107984e17
指定纪元和时钟计时单元
创建一个 DateTime 数组。将时区指定为东京所在的时区。
using TimeZones
using TyBaseEx
D = ZonedDateTime.(DateTime.(2019, 10:12, 1, 12, 0, 0), tz"Asia/Tokyo")
D=
3-element Vector{ZonedDateTime}:
2019-10-01T12:00:00+09:00
2019-11-01T12:00:00+09:00
2019-12-01T12:00:00+09:00

转换 D。要将时间表示为自 2001 年 1 月 1 日以来经过的毫秒数,请指定 epoch 和 tickspersecond 名称-值对组参数。您可以将纪元指定为 DateTime 值,或指定为文本格式的日期和时间。当您指定 "epochtime" 时,输出是有符号 64 位整数组成的数组。

X = convertTo(D, "epochtime"; epoch="2001-01-01", tickspersecond=1000)
3-element Vector{Float64}:
 5.91624e11
 5.943024e11
 5.968944e11

如果未指定 D 的时区,则当您指定 "epochtime" 时,convertTo 函数会将 D 的元素视为 UTC 时间。

# 输入参数

D - 输入日期和时间
DateTime 数组
输入日期和时间,指定为 DateTime 数组。
dateType - 输出数值表示类型
"excel" | "excel1904" | "juliandate" | "modifiedjuliandate" | "posixtime" | ...
输出数值表示类型,指定为表中的值。

dateType 的值决定输出数组的数据类型。一些数值表示要求有符号 64 位整数。根据这些要求,输出可以具有 Float64 或 Int64 数据类型。

dataType的值 输出数值表示 输出数值类型
"excel" 自 1900 年 1 月 0 日起计的天数,表示 Excel® 日期值。
注意:Excel 日期值舍入为最近的微秒。
请注意:Excel 错误地假设 1900 年是闰年。因此,计算 Excel 日期值时,1900 年 2 月 28 日与 1900 年 3 月 1 日之间因为多了一天而中断。
Float64
"excel1904" 自 1904 年 1 月 0 日起计的天数,表示 Excel 日期值。
注意:Excel 日期值舍入为最近的微秒。
请注意:Excel 错误地假设 1900 年是闰年。因此,计算 Excel 日期值时,1900 年 2 月 28 日与 1900 年 3 月 1 日之间因为多了一天而中断。
Float64
"juliandate" 自 UTC 时间公元前 4714 年 11 月 24 日中午(前公历日历)起计的天数,表示儒略日期。
注意:如果未指定 D 的时区,则 convertTo 会将 D 中的值视为 UTC 时间,而不是本地时间。要表示本地时间,请在调用 convertTo 函数之前,使用 D 的 TimeZone 属性指定时区。
示例:使用东京的时区转换 D。
using TyBaseEx
using TimeZones
D = ZonedDateTime.(DateTime.(2019, 10:12, 1, 12, 0, 0), tz"Asia/Tokyo")
X = convertTo(D,"juliandate")
Float64
"modifiedjuliandate" 自 UTC 时间 1858 年 11 月 17 日午夜起计的天数,表示修改后的儒略日期。
注意:如果未指定 D 的时区,则 convertTo 会将 D 中的值视为 UTC 时间,而不是本地时间。要表示本地时间,请在调用 convertTo 函数之前,使用 D 的 TimeZone 属性指定时区。
示例:使用东京的时区转换 D。
using TyBaseEx
using TimeZones
D = ZonedDateTime.(DateTime.(2019, 10:12, 1, 12, 0, 0), tz"Asia/Tokyo")
X = convertTo(D,"modifiedjuliandate")
Float64
"posixtime" 自 UTC 时间 1970 年 1 月 1 日 00:00:00(该时间点称为 Unix 纪元)起计的秒数。 Unix 时间,也称为 UNIX 纪元时间或 POSIX 时间,是针对 Unix 纪元测量时间的系统。(Unix 时间会忽略闰秒,因此不能真正表示 UTC 时间。)
注意:如果未指定 D 的时区,则 convertTo 会将 D 中的值视为 UTC 时间,而不是本地时间。要表示本地时间,请在调用 convertTo 函数之前,使用 D 的 TimeZone 属性指定时区。
示例:转换 D,将其时区指定为东京所在的时区。
using TyBaseEx
using TimeZones
D = ZonedDateTime.(DateTime.(2019, 10:12, 1, 12, 0, 0), tz"Asia/Tokyo")
X = convertTo(D,"posixtime")
Float64
"yyyymmdd" 以 YYYYMMDD 数值形式表示的日期。例如,20140402 表示 2014 年 4 月 2 日。 Int64
"datenum" 自 0000 年 1 月 0 日(前 ISO 日历)起计的天数。 Float64
"ntp" 自 UTC 时间 1900 年 1 月 1 日 00:00:00 起计的“时钟计时单元”数,表示网络时间协议 (NTP) 时间戳,其中每个时钟计时单元为 2^-32 秒。convertTo 会将 D 中的值视为 UTC 时间,而不是本地时间。要表示本地时间,请在调用 convertTo 函数之前,使用 D 的 TimeZone 属性指定时区。 Float64
".net" 自 UTC 时间 0001 年 1 月 1 日 00:00:00 起计的“时钟计时单元”数,表示 Microsoft® .NET 时间戳,其中每个时钟计时单元为 100 纳秒。convertTo 会将 D 中的值视为 UTC 时间,而不是本地时间。要表示本地时间,请在调用 convertTo 函数之前,使用 D 的 TimeZone 属性指定时区。 Float64
"ntfs" 自 UTC 时间 1601 年 1 月 1 日 00:00:00 起计的“时钟计时单元”数,表示 NTFS 时间戳,其中每个时钟计时单元为 100 纳秒。convertTo 会将 D 中的值视为 UTC 时间,而不是本地时间。要表示本地时间,请在调用 convertTo 函数之前,使用 D 的 TimeZone 属性指定时区。 Float64
"epochtime" 自指定纪元起计的秒数。将此选项与 "epoch" 和 "tickspersecond" 名称-值对组参数结合使用。
注意:如果未指定 D 的时区,则 convertTo 会将 D 中的值视为 UTC 时间,而不是本地时间。要表示本地时间,请在调用 convertTo 函数之前,使用 D 的 TimeZone 属性指定时区。
示例:指定 D 的时区。然后将其转换为自 2001 年 1 月 1 日以来经过的秒数。
using TyBaseEx
using TimeZones
D = ZonedDateTime.(DateTime.(2019, 10:12, 1, 12, 0, 0), tz"Asia/Tokyo")
X = convertTo(D,"epochtime",epoch="2001-01-01")
Float64

# 名称-值参数

将可选的参数对组指定为 Key1=value1,...,KeyN=valueN,其中 Key 是参数名称,value 是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。

使用逗号分隔每个名称和值。

示例: convertTo(D,"epochtime";epoch="2001-01-01",tickspersecond=1000) 返回自 2001 年 1 月 1 日起计的毫秒数。

epoch — 用于时间测量的点
datetime(1970,1,1,0,0,0,'"TimeZone","UTC") (默认)| DateTime 标量 | 字符串 | 字符串标量
用于时间测量的点,指定为以逗号分隔的对组,其中包含 "epoch" 和 DateTime 标量、字符串或字符串标量。

如果 "epoch" 的值是字符向量或字符串标量,则它必须以 DateTime 函数能够识别的格式表示日期时间(例如,"2001-01-01" 表示 2001 年 1 月 1 日)。

默认值为 Unix 纪元,表示 UTC 时间 1970 年 1 月 1 日 00:00:00。

tickspersecond — 每秒的时钟计时单元数
1 (默认) | 数值标量
每秒的时钟计时单元数,指定为以逗号分隔的对组,其中包含 "tickspersecond" 和数值标量。

# 另请参阅

DateTime |datenum