AnyLogic中使用toDate函数转换Excel拆分日期整数创建自定义代理问题
AnyLogic 拆分存储日期字段的使用方案
方案1:查询时直接生成日期字段(你设想的新增列方案)
不需要在数据库中物理新增字段,直接在Source模块的查询逻辑中添加计算列即可:
- 打开Source模块属性面板,「Arrival defined by」选择「Database table」
- 选中存储拆分日期字段的对应表后,在「Columns to retrieve」区域点击添加按钮,新增自定义计算列
- 计算列表达式填写
toDate(year, month, day, hour, minute, second),自定义列名设为arrival_date,后续直接调用该字段即可获取日期格式数据
方案2:代理创建时动态转换
如果仅需要将日期作为参数传入代理,不需要用于到达时间判断,直接在创建代理时转换即可:
- 首先确认自定义代理类型中已添加日期类型的参数,例如命名为
recordTime - 在Source模块「New agent」板块的参数赋值区域,对应
recordTime的取值栏填写如下代码:
toDate( (int)getTypedValue("year"), (int)getTypedValue("month"), (int)getTypedValue("day"), (int)getTypedValue("hour"), (int)getTypedValue("minute"), (int)getTypedValue("second") )
- 如果需要将生成的代理加入自定义群体,直接在Source的「On exit」动作中添加代码:
自定义群体名称.add(agent);,将占位符替换为你自己的群体名称即可
注意事项
- AnyLogic内置的
toDate函数月份参数从1开始计数,和你存储的1-12月数值完全匹配,不需要额外做偏移调整 - 读取数据库字段时如果触发类型不匹配报错,用
(int)做强制类型转换即可,避免数据库返回的数值被识别为double类型导致传参错误
内容的提问来源于stack exchange,提问作者Aron T.
相关产品推荐
相关产品推荐

