我一直在努力尝试将给定时间转换为其他格式,同时考虑外部设备的时区,跳过操作系统的时区转换。
最初,我有UTC时间和设备的时区。例如,我现在的时间是秒= 1343931446,时区= -0700。我要做的是将其转换为YYYYMMDD_HHMMSS
格式,该格式已正常工作了一段时间。对于上述值,它应该是20120802_111726
。
自从我编写代码后,下面的代码块工作顺利于7月11日。问题归结为这样一个事实:当一天只有1位数(也就是昨天开始)时,解析出错了,我得到了20120821_011726
。我假设问题是当我将时间值转换为日期时间时,就像我打印time_t
时一样,我将获得time.struct_time(tm_year=2012, tm_mon=8, tm_mday=2, tm_hour=18, tm_min=17, tm_sec=26, tm_wday=3, tm_yday=215, tm_isdst=0)
,当解析为{{1}时,它被视为单个字符串。 1}}。
问题是,我可以强制日期时间接受每月/每小时的2个字符输入,以便它能够正确解析,还是有更好的方法来转换这些格式?请记住,这个当前的方法是由于无法使用任何占当前系统时间的方法而编写的,因为这样做的地方不能保证系统上的时区与秒的设备相同。从。获得。
datetime
答案 0 :(得分:1)
您的时间戳以秒表示,您的时区以小时和分钟表示。只需减去或添加转换为秒的时区,然后使用time.strftime函数将其格式化为您想要的字符串:
def convertTime(seconds, tz):
tzhours, tzminutes = map(int, (tz.lstrip('-')[:2], tz[-2:]))
offset = tzhours * 3600 + tzminutes * 60
if tz.startswith('-'):
offset *= -1
return time.strftime('%Y%m%d_%H%M%S', time.gmtime(seconds + offset))