如何在MicroPython中解析ISO 8601日期时间以获取星期几?
解决MicroPython(Raspberry Pi Pico)解析ISO 8601日期并格式化的问题
因为MicroPython的time模块无法直接解析ISO 8601格式的日期字符串,我们可以通过手动拆分字符串+时间元组转换的方式实现需求,具体步骤和代码如下:
实现思路
- 拆分ISO日期字符串,提取年、月、日的数值
- 构造
time模块可识别的时间元组,转换为时间戳 - 通过
time.localtime()获取包含星期信息的时间元组 - 将星期数字映射为对应的英文名称,再与日期拼接成目标格式
代码示例
import time def iso_to_weekday_day(date_str): # 拆分ISO字符串,提取日期部分(去掉时间和T分隔符) date_part = date_str.split('T')[0] # 将日期字符串转为整数类型的年、月、日 year, month, day = map(int, date_part.split('-')) # 构造time.mktime所需的时间元组:(年, 月, 日, 时, 分, 秒, 星期占位, 年内天数占位, 夏令时标记) # 后面的占位填0,夏令时标记填-1让系统自动判断 time_tuple = (year, month, day, 0, 0, 0, 0, 0, -1) # 转换为时间戳 timestamp = time.mktime(time_tuple) # 获取包含星期信息的本地时间元组 local_time = time.localtime(timestamp) # 映射星期数字到英文名称(tm_wday:0=周一,6=周日) weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"] weekday_name = weekdays[local_time[6]] # 返回目标格式字符串 return f"{weekday_name} {local_time[2]}" # 测试用例 sample_date = "2023-10-18T00:00:00" print(iso_to_weekday_day(sample_date)) # 输出: Wednesday 18
注意事项
- 如果你的ISO日期字符串包含时区信息(如
2023-10-18T00:00:00+08:00),需要先做时区偏移处理,再转换为本地时间戳,否则结果会有偏差。 - 确保Raspberry Pi Pico的系统时间已正确设置,否则转换出的星期信息可能不准确。
内容的提问来源于stack exchange,提问作者John Horner
相关产品推荐
相关产品推荐

