时序对象的操作

获取时间变量的部分信息

获取时间变量的部分信息的用法如下:

year(2016.02.14);
// output: 2016

monthOfYear(2016.02.14);
// output: 2

dayOfMonth(2016.02.14);
// output: 14

x=01:02:03.456;
hour(x);
// output: 1

minuteOfHour(x);
// output: 2

secondOfMinute(x);
// output: 3

x mod 1000;
// output: 456

用运算符调整时间变量值

使用运算符"+"或"-"来调整时间变量的值。

2016.02M-13;
// output: 2015.01M

2018.02.17+100;
// output: 2018.05.28

01:20:15+200;
// output: 01:23:35

对于minute, second, time和nanotime类型的时间序列对象,表示这些对象的内部整数的最小值为0,最大值分别为1440-1, 86400-1, 86400000-1和86400000000000-1。如果进行运算调整之后,其中一个表示这些对象的内部整数小于0或大于相应的最大值,最终结果是内部整数除以相应的最大值的余数。

23:59m+10;
// output: 00:09m

00:00:01-2;
// output: 23:59:59

23:59:59.900+200;
// output: 00:00:00.100

用时间单位调整时间变量值

temporalAdd 函数以不同的时间单位调整时间变量的值。

temporalAdd(2017.01.16,1,"w");
// output: 2017.01.23

temporalAdd(2016.12M,2,"M");
// output: 2017.02M

temporalAdd(13:30m,-15,"m");
// output: 13:15m

合并日期与时间

concatDateTime 函数可以合并日期和时间。

concatDateTime(2019.06.15,13:25:10);
// output: 2019.06.15T13:25:10

concatDateTime(2019.06.15 2019.06.16 2019.06.17,[13:25:10, 13:25:12, 13:25:13]);
// output: [2019.06.15T13:25:10,2019.06.16T13:25:12,2019.06.17T13:25:13]

与 Date Offset 相关的函数

DolphinDB 提供了一系列用于时间对象处理的函数,用于将日期调整到特定的日历边界(如月初、月末、工作日等),支持自然日历、业务日历、财务日历等多种时间语义。

自然日历函数

  • monthBegin :获取当月的第一天

  • monthEnd :获取当月的最后一天

  • semiMonthBegin :获取当前半月周期的起始日期(1日或15日)

  • semiMonthEnd :获取输入日期当前或之前最近的半月周期结束日(15日或月末最后一天)

  • quarterBegin :获取当前季度的第一天

  • quarterEnd :获取当前季度的最后一天

  • weekEnd :获取当前周的结束日(可指定一周结束日,默认周日结束)

  • weekBegin :获取当前周的开始日(可指定一周起始日,默认从星期一开始)

  • lastWeekOfMonth :获取当月或上一个月最后一个指定星期几对应的日期。(可指定目标星期几,默认为星期一)

  • weekOfMonth :获取当月或上一个月第几周的星期几(默认为第一周的星期一)

  • yearBegin :获取当年的第一天

  • yearEnd :获取当年的最后一天

计算规则

DolphinDB 中这类函数根据输入日期确定其所属的时间周期(月/季/半月/周/年),直接返回该周期的起始日或结束日。此类函数不涉及工作日判断,而是完全基于日历规则进行计算。例如 monthBegin 取输入日期所在月的第1天,quarterEnd 取所在季度的最后一天,其语义与 pandas 中对应的时间周期函数基本一致。

业务日期函数

计算规则

DolphinDB 这类函数先确定输入日期所属的时间周期(月/季/年),再在该周期内定位第一个或最后一个工作日(周一至周五)。对于 businessDay,若输入为非工作日,则返回最近的前一个工作日;对于 Begin/End 类函数,即使输入为非工作日,Begin 类函数采用 rollback 语义,返回输入日期所属周期(或前一个周期)的第一个工作日;End 类函数采用 rollforward 语义,返回输入日期所属周期(或下一个周期)的最后一个工作日。例如

  • businessMonthBegin(2026.02.02)(周一)返回 2026.02.02(该月第一个工作日恰好为输入日期),而 businessMonthBegin(2026.01.31)(周六)返回 2026.01.01(输入日期在当月第一个工作日之后,回退到当月的第一个工作日)。语义等价于 pandas BMonthBegin().rollback(ts)

  • businessMonthEnd(2026.02.02)(周一)返回 2026.02.27(当月最后一个工作日),而

    businessMonthEnd(2026.01.31)(周六)返回 2026.02.27 (已超过当月月末工作日,前进到下一个月的月末工作日)。语义等价于 pandas BMonthEnd().rollforward(ts)

此外,DolphinDB 提供扩展能力:当同时指定 offsetn 参数时,系统会基于指定的业务周期类型构建连续的业务周期序列(如 day、month、quarter 或 year),其中 offset 用于确定对齐起点,而 n 用于定义分组间隔(以周期为单位)。

在该模式下,计算不再局限于单一周期内的边界定位,而是先对业务周期序列进行分组,再在每个分组区间内应用 Begin / End 语义,从而得到基于分组后的业务周期区间边界结果。

businessDay(2026.02.01)
// output: 2026.01.30

businessMonthBegin(2016.10.06);
// output: 2016.10.03

businessMonthEnd(2016.07.06);
// output: 2016.07.29

businessQuarterBegin(2012.06.12);
// output: 2012.04.02

businessQuarterEnd(2012.06.12);
// output: 2012.06.29

businessYearBegin(2011.06.02);
// output: 2011.01.03

businessYearEnd(2011.06.12);
// output: 2011.12.30

时间属性提取函数

计算规则

直接判断输入日期的日历属性,返回布尔值或整数。不涉及时间偏移或周期计算。例如 isMonthEnd 判断日期是否等于该月最后一天,daysInMonth 根据年份和月份计算天数(闰年2月返回29)。DolphinDB 与 pandas 在语义上基本一致。

isMonthStart(2011.01.01);
// output: true

isMonthEnd(2011.12.31);
// output: true

daysInMonth(2012.12.02);
// output: 31

isQuarterStart(2011.01.01);
// output: true

isQuarterEnd(2011.12.31);
// output: true

isYearStart(2011.01.01);
// output: true

isYearEnd(2011.12.31);
// output: true

isLeapYear(2012.06.25);
// output: true

财务日历

财务日历函数用于处理基于财年规则的时间划分,例如 52/53 周财年模型(FY5253)。该类函数依赖财年结束月份、周结束日、nearest / last、53 周插入策略等财务规则。

  • fy5253 :获取当前财年开始的第一天

  • fy5253Quarter :获取当前财季开始的第一天

计算规则

基于 FY5253 财年模型,根据配置参数(财年结束月份、周结束日、nearest/last 策略)确定输入日期所属的财年或财季,返回该财年/财季的起始日。

计算过程

  1. 确定财年结束锚点(如12月最后一个/最近的周五);

  2. 以此锚点划分52或53周的财年区间;

  3. 判断输入日期落在哪个区间,返回该区间起始日。

语义等价于 pandas FY5253().rollback(ts)FY5253Quarter().rollback(ts)

fy5253(2016.11.01);
// output: 2016.02.01

fy5253Quarter(2016.11.01);
// output: 2016.10.31

时间区间类型

  • duration:不进行日历计算,仅将字符串解析为固定时间间隔的类型标识(如 "5M" 为 5 个月,"3XNYS" 为 3 个纽交所交易日)。与日历边界函数不同,它表示时间长度而非时间点,不支持比较或算术运算。
duration("5M")
// output: 5M

duration("3XNYS")
// output: 3XNYS