如何将simmer仿真得到的时间单位数据转换为标准格式时间戳
解决方案
首先明确核心换算逻辑:
你提到仿真运行到2700单位对应7天时长,先计算单个仿真时间单位对应的实际时长:
7天总秒数 = 7 * 24 * 3600 = 604800 秒
单仿真单位对应秒数 = 604800 / 2700 = 224 秒
如果你的时间单位对应规则有调整,可自行修改换算系数即可
步骤1:指定基准开始时间
直接定义你需要的仿真0时刻对应的真实时间即可,例如要将仿真0点对应为2020-01-01 00:00:00,直接声明该时间变量即可。
步骤2:批量转换事件日志的起止时间
R实现(适配simmer原生环境)
simmer是R语言的离散事件仿真包,直接用R的时间处理函数操作最便捷:
library(dplyr) library(lubridate) # 定义参数 base_time <- ymd_hms("2020-01-01 00:00:00") sim_unit_seconds <- 224 # 按2700单位=7天换算的结果 # 假设你的事件日志存储在df数据框中,自带start、end列 df <- df %>% mutate( # 转换为时间类型 start_timestamp = base_time + seconds(start * sim_unit_seconds), end_timestamp = base_time + seconds(end * sim_unit_seconds), # 如需直接输出字符串格式,保留下面两行即可 start_timestamp = format(start_timestamp, "%Y-%m-%d %H:%M:%S"), end_timestamp = format(end_timestamp, "%Y-%m-%d %H:%M:%S") )
Python实现(如果用Python处理导出的日志)
import pandas as pd from datetime import datetime, timedelta # 定义参数 base_time = datetime(2020, 1, 1, 0, 0, 0) sim_unit_seconds = 224 # 读取日志文件 df = pd.read_csv("你的事件日志存储路径.csv") # 时间转换 df['start_timestamp'] = df['start'].apply(lambda x: base_time + timedelta(seconds = x * sim_unit_seconds)) df['end_timestamp'] = df['end'].apply(lambda x: base_time + timedelta(seconds = x * sim_unit_seconds)) # 转指定格式的字符串 df['start_timestamp'] = df['start_timestamp'].dt.strftime('%Y-%m-%d %H:%M:%S') df['end_timestamp'] = df['end_timestamp'].dt.strftime('%Y-%m-%d %H:%M:%S')
注意事项
- 如果你后续修改了
run(until=xxx)的停止阈值,记得重新计算单仿真单位对应的秒数,换算逻辑为:单单位秒数 = 预期仿真总时长的秒数 / 仿真停止阈值 - 样例中超过2700的时间单位(如end为6699.370的记录)属于仿真结束后未完成的活动,可根据业务需求选择保留转换或直接过滤。
内容的提问来源于stack exchange,提问作者ncnc_2020
相关产品推荐
相关产品推荐

