Discuss / Python / 这个时间转换,我是完全懵了,按照我的理解,不是直接当前时间加上或者减去时间差,直接求timestamp 不就OK了... 为何不对?

这个时间转换,我是完全懵了,按照我的理解,不是直接当前时间加上或者减去时间差,直接求timestamp 不就OK了... 为何不对?

Topic source

一雷叔一

#1 Created at ... [Delete] [Delete and Lock User]

作业: import re from datetime import datetime, timezone, timedelta

def to_timestamp(dt_str, tz_str): cday = datetime.strptime(dt_str, '%Y-%m-%d %H:%M:%S') Uh = re.match(r'UTC([+-][0-1][0-9]|[+-][0-9]):00', tz_str) UTC_day = cday.replace(tzinfo=timezone(timedelta(hours=int(Uh.group(1))))) Tday = UTC_day.astimezone(timezone(timedelta(hours=int(Uh.group(1))))) return Tday.timestamp()

t1 = to_timestamp('2015-6-1 08:10:30', 'UTC+7:00') t2 = to_timestamp('2015-5-31 16:10:30', 'UTC-09:00')

print(t1) print(t2)

这个时间转换,我是完全懵了,按照我的理解,不是直接当前时间加上或者减去时间差,得到UTC时间,直接求timestamp 不就OK了... 为何不对?

看了大家的答案修改了一下我的程序,但是改了还是有点懵...

UTC_day = cday.replace(tzinfo=timezone(timedelta(hours=int(Uh.group(1))))) Tday = UTC_day.astimezone(timezone(timedelta(hours=int(Uh.group(1)))))

这里的两次转换起到什么作用呢?

廖雪峰

#2 Created at ... [Delete] [Delete and Lock User]

astimezone()就是让系统自带的库帮你算,难道你想自己实现一遍?

JoyDamn

#3 Created at ... [Delete] [Delete and Lock User]

没必要用

Tday = UTC_day.astimezone(timezone(timedelta(hours=int(Uh.group(1)))))

这句可以省去,实际上你这个Tday=UTC_day,相当于你第一句把datetime的tzinfo设为了一个数字,设置完的datatime已经可以直接使用timestamp函数了,你第二次Tday使用astimezone是用来把UTC_day换成另一个时区的,然而你的参数还是int(Uh.group(1)),相当于废操作 不过我看了几个答案,救你考虑到了时区正负号的问题,很不错

JoyDamn

#4 Created at ... [Delete] [Delete and Lock User]

看错了,正负号大家都有


  • 1

Reply