Datetime API#

NumPy 在内部使用 int64 计数器和单元元数据结构来表示日期.时间差也类似地使用 int64 和单元元数据结构来表示.以下描述的函数可用于促进 C 中 ISO 8601 日期字符串,NumPy datetimes 和 Python datetime 对象之间的转换.

数据类型#

除了 npy_datetimenpy_timedelta typedefs(针对 npy_int64 )之外,NumPy 还定义了两个额外的结构体,它们表示时间单位元数据和 datetime 的"分解"视图.

type PyArray_DatetimeMetaData#

表示 datetime 单位元数据.

typedef struct {
    NPY_DATETIMEUNIT base;
    int num;
} PyArray_DatetimeMetaData;
NPY_DATETIMEUNIT base#

datetime 的单位.

int num#

单位的乘数.

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"是频率的缩写.

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#

未绑定单位,可以转换为任何单位

转换函数#

int NpyDatetime_ConvertDatetimeStructToDatetime64(PyArray_DatetimeMetaData *meta, const npy_datetimestruct *dts, npy_datetime *out)#

将一个时间日期从 datetimestruct 转换为由单位元数据指定的单位的时间日期.假定日期是有效的.

如果元数据结构体的 num 成员很大,此函数中可能存在整数溢出.

成功时返回 0,失败时返回 -1.

int NpyDatetime_ConvertDatetime64ToDatetimeStruct(PyArray_DatetimeMetaData *meta, npy_datetime dt, npy_datetimestruct *out)#

将具有单位元数据指定单位的时间日期转换为分解的时间日期结构体.

成功时返回 0,失败时返回 -1.

int NpyDatetime_ConvertPyDateTimeToDatetimeStruct(PyObject *obj, npy_datetimestruct *out, NPY_DATETIMEUNIT *out_bestunit, int apply_tzinfo)#

测试并将 Python datetime.datetimedatetime.date 对象转换为 NumPy npy_datetimestruct .

out_bestunit 根据对象是 datetime.date 还是 datetime.datetime 对象,给出一个建议的单位.

如果 apply_tzinfo 为 1,则此函数使用 tzinfo 转换为 UTC 时间,否则返回具有本地时间的结构体.

出错时返回 -1,成功时返回 0,如果 obj 没有所需的 date 或 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 位数字(最大 atto 秒精度).

  • 可以使用 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)#

返回用于转换具有给定本地时间和单位设置的时间日期对象的字符串长度.在构造要提供给 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(例如,如果输出字符串太短).