如何将Streamlit时间输入结合指定日期转换为Unix纪元毫秒数
将Streamlit的st.time_input输入转换为Unix纪元毫秒数
实现步骤
- 把
YYYYMMDD格式的日期字符串解析为date对象 - 将
st.time_input返回的time对象与日期合并为完整的datetime对象 - 将
datetime对象转为Unix时间戳(秒级),再乘以1000得到毫秒数 - 若需基于UTC时间计算,需额外处理时区转换
完整代码示例
import streamlit as st from datetime import datetime, date, timedelta # 给定日期字符串 day = '20240325' # YYYYMMDD格式 # 修正step参数:支持传入秒数或timedelta对象,这里设置1分钟步长 time = st.time_input('Execution time', step=60) # 或 step=timedelta(minutes=1) # 解析日期字符串为date对象 parsed_date = date(int(day[:4]), int(day[4:6]), int(day[6:8])) # 合并日期与时间为datetime对象 full_datetime = datetime.combine(parsed_date, time) # 转换为Unix纪元以来的毫秒数 time_in_ms_since_epoch = int(full_datetime.timestamp() * 1000) print(time_in_ms_since_epoch)
关键说明
st.time_input返回的是datetime.time类型,无法直接生成时间戳,必须和日期组合成datetime对象timestamp()方法默认返回本地时间对应的Unix秒级时间戳,若需UTC时间戳,可做如下转换:full_datetime_utc = full_datetime.astimezone(datetime.timezone.utc) time_in_ms_since_epoch_utc = int(full_datetime_utc.timestamp() * 1000)- 原代码中的
step=0:1:00是错误写法,Streamlit要求step参数为整数(秒数)或datetime.timedelta对象
内容的提问来源于stack exchange,提问作者Sam333
相关产品推荐
相关产品推荐

