时序对象的操作
获取时间变量的部分信息
获取时间变量的部分信息的用法如下:
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 中对应的时间周期函数基本一致。
业务日期函数
-
businessDay :获取当前或上一个工作日
-
businessMonthBegin :获取当月的第一个工作日
-
businessMonthEnd :获取当月的最后一个工作日
-
businessQuarterBegin :获取当前季度的第一个工作日
-
businessQuarterEnd :获取当前季度的最后一个工作日
-
businessYearBegin :获取当年的第一个工作日
-
businessYearEnd :获取当年的最后一个工作日
计算规则
DolphinDB 这类函数先确定输入日期所属的时间周期(月/季/年),再在该周期内定位第一个或最后一个工作日(周一至周五)。对于
businessDay,若输入为非工作日,则返回最近的前一个工作日;对于 Begin/End
类函数,即使输入为非工作日,Begin 类函数采用 rollback 语义,返回输入日期所属周期(或前一个周期)的第一个工作日;End 类函数采用
rollforward 语义,返回输入日期所属周期(或下一个周期)的最后一个工作日。例如
-
businessMonthBegin(2026.02.02)(周一)返回 2026.02.02(该月第一个工作日恰好为输入日期),而businessMonthBegin(2026.01.31)(周六)返回 2026.01.01(输入日期在当月第一个工作日之后,回退到当月的第一个工作日)。语义等价于 pandasBMonthBegin().rollback(ts)。 -
businessMonthEnd(2026.02.02)(周一)返回 2026.02.27(当月最后一个工作日),而businessMonthEnd(2026.01.31)(周六)返回 2026.02.27 (已超过当月月末工作日,前进到下一个月的月末工作日)。语义等价于 pandasBMonthEnd().rollforward(ts)。
此外,DolphinDB 提供扩展能力:当同时指定 offset 与 n 参数时,系统会基于指定的业务周期类型构建连续的业务周期序列(如 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
时间属性提取函数
-
isMonthStart :判断当天是否为月初的第一天
-
isMonthEnd :判断当天是否为月末的最后一天
-
daysInMonth :获取当月的天数
-
isQuarterStart :判断当天是否为季度的第一天
-
isQuarterEnd :判断当天是否为季度的最后一天
-
isYearStart :判断当天是否为年初第一天
-
isYearEnd :判断当天是否为年末最后一天
-
isLeapYear :判断当年是否为闰年
计算规则
直接判断输入日期的日历属性,返回布尔值或整数。不涉及时间偏移或周期计算。例如 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 策略)确定输入日期所属的财年或财季,返回该财年/财季的起始日。
计算过程
-
确定财年结束锚点(如12月最后一个/最近的周五);
-
以此锚点划分52或53周的财年区间;
-
判断输入日期落在哪个区间,返回该区间起始日。
语义等价于 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
