Datetime API#
NumPy 在内部使用 int64 计数器和单元元数据结构来表示日期.时间差也以类似的方式表示,使用 int64 和单元元数据结构.以下描述的函数可用于方便地在 ISO 8601 日期字符串,NumPy datetime 和 C 中的 Python datetime 对象之间进行转换.
数据类型#
除了 npy_datetime 和 npy_timedelta 这两个 npy_int64 的 typedef 之外,NumPy 还定义了两个额外的 struct,它们分别表示时间单位元数据和 datetime 的“展开”视图.
-
type PyArray_DatetimeMetaData#
表示 datetime 单位元数据.
typedef struct { NPY_DATETIMEUNIT base; int num; } PyArray_DatetimeMetaData;
-
NPY_DATETIMEUNIT base#
datetime 的单位.
-
int num#
单位的乘数.
-
NPY_DATETIMEUNIT base#
-
type npy_datetimestruct#
datetime 值的“展开”视图
typedef struct { npy_int64 year; npy_int32 month, day, hour, min, sec, us, ps, as; } npy_datetimestruct;
-
enum NPY_DATETIMEUNIT#
NumPy 支持的时间单位.枚举变体名称中的“FR”是 frequency 的缩写.
-
enumerator NPY_FR_ERROR#
错误或未确定的单位.
-
enumerator NPY_FR_Y#
年
-
enumerator NPY_FR_M#
月
-
enumerator NPY_FR_W#
周
-
enumerator NPY_FR_D#
天
-
enumerator NPY_FR_h#
小时
-
enumerator NPY_FR_m#
分钟
-
enumerator NPY_FR_s#
秒
-
enumerator NPY_FR_ms#
毫秒
-
enumerator NPY_FR_us#
微秒
-
enumerator NPY_FR_ns#
纳秒
-
enumerator NPY_FR_ps#
皮秒
-
enumerator NPY_FR_fs#
飞秒
-
enumerator NPY_FR_as#
阿秒
-
enumerator NPY_FR_GENERIC#
无界单位,可以转换为任何单位
-
enumerator NPY_FR_ERROR#
转换函数#
-
int NpyDatetime_ConvertDatetimeStructToDatetime64(PyArray_DatetimeMetaData *meta, const npy_datetimestruct *dts, npy_datetime *out)#
将 datetime 从 datetimestruct 转换为单位元数据指定的单位的 datetime.假定日期有效.
如果元数据 struct 的
num成员很大,则此函数中可能存在整数溢出.成功返回 0,失败返回 -1.
-
int NpyDatetime_ConvertDatetime64ToDatetimeStruct(PyArray_DatetimeMetaData *meta, npy_datetime dt, npy_datetimestruct *out)#
将具有单位元数据指定的单位的 datetime 转换为展开的 datetime struct.
成功返回 0,失败返回 -1.
-
int NpyDatetime_ConvertPyDateTimeToDatetimeStruct(PyObject *obj, npy_datetimestruct *out, NPY_DATETIMEUNIT *out_bestunit, int apply_tzinfo)#
测试并将 Python
datetime.datetime或datetime.date对象转换为 NumPynpy_datetimestruct.out_bestunit根据对象是datetime.date还是datetime.datetime对象,给出一个建议的单位.如果
apply_tzinfo为 1,则此函数使用 tzinfo 转换为 UTC 时间,否则返回具有本地时间的 struct.出错时返回 -1,成功时返回 0,如果 obj 没有所需的日期或 datetime 属性,则返回 1(没有设置错误).
-
int NpyDatetime_ParseISO8601Datetime(char const *str, Py_ssize_t len, NPY_DATETIMEUNIT unit, NPY_CASTING casting, npy_datetimestruct *out, NPY_DATETIMEUNIT *out_bestunit, npy_bool *out_special)#
解析(几乎)标准 ISO 8601 日期字符串.区别在于:
日期“20100312”被解析为年份 20100312,而不是等同于“2010-03-12”.日期中的“-”不是可选的.
只有秒可以有小数点,小数点后最多 18 位数字(最大阿秒精度).
可以使用 ISO 8601 中的“T”或“ ”来分隔日期和时间.两者被同等对待.
不(尚未)处理“YYYY-DDD”或“YYYY-Www”格式.
不处理闰秒(在这些情况下,秒值为 60).
不处理 24:00:00 作为明天午夜 (00:00:00) 的同义词
接受特殊值“NaT”(非时间),“Today”(根据当地时间的当前日期)和“Now”(UTC 的当前时间).
str必须是一个 NULL 结尾的字符串,len必须是它的长度.如果单位未知,
unit应包含 -1,否则包含将使用的单位.casting控制如何将字符串中检测到的单位转换为 ‘unit’ 参数.out会被填充已解析的日期时间.out_bestunit根据字符串提供的解析度给出一个建议的单位,或者对于 NaT 给 -1.如果解析的时间是 ‘today’,’now’,空字符串或 ‘NaT’,则
out_special会被设置为 1.对于 ‘today’,建议的单位是 ‘D’,对于 ‘now’,建议的单位是 ‘s’,对于 ‘NaT’,建议的单位是 ‘Y’.成功时返回 0,失败时返回 -1.
-
int NpyDatetime_GetDatetimeISO8601StrLen(int local, NPY_DATETIMEUNIT base)#
返回用于将具有给定本地时间和单位设置的 datetime 对象转换为字符串的字符串长度.在构造提供给
NpyDatetime_MakeISO8601Datetime的字符串时使用它.
-
int NpyDatetime_MakeISO8601Datetime(npy_datetimestruct *dts, char *outstr, npy_intp outlen, int local, int utc, NPY_DATETIMEUNIT base, int tzoffset, NPY_CASTING casting)#
将
npy_datetimestruct转换为(几乎是)ISO 8601 的 NULL 结尾的字符串.如果字符串恰好适合该空间,它会省略 NULL 终止符并返回成功.与 ISO 8601 的不同之处在于 ‘NaT’ 字符串,年份位数 >= 4 而不是严格的 4.
如果
local非零,它会生成一个具有 +-#### 时区偏移的本地时间字符串.如果local为零且utc非零,则生成一个以 ‘Z’ 结尾的字符串以表示 UTC.默认情况下,不附加时区信息.base将输出限制为该单位.将base设置为 -1 以自动检测一个基数,在该基数之后所有值都为零.如果启用了
local并且tzoffset设置为 -1 以外的值,则使用tzoffset. 这是要使用的本地时区的手动覆盖,以分钟为单位的偏移量.casting控制是否允许通过将数据截断为更粗糙的单位来丢失数据. 这与local相互作用,略有不同,为了形成作为本地时间的日期单位字符串,强制转换必须是不安全的.成功时返回 0,失败时返回 -1(例如,如果输出字符串太短).