编写函数将datetime和UTC转化为timestamp

版权声明:欢迎转载,但是请标明文章作者和出处。 https://blog.csdn.net/handsomehuo/article/details/90718229

这道习题来源于廖雪峰python教程常用内建模块-datetime

题目要求:假设你获取了用户输入的日期和时间如2015-1-21 9:01:30,以及一个时区信息如UTC+5:00,均是str,请编写一个函数将其转换为timestamp

解决思路一:1970年1月1日 00:00:00 UTC+00:00时区的时刻称为epoch time,记为0(1970年以前的时间timestamp为负数),当前时间就是相对于epoch time的秒数,称为timestamp。timestamp()函数能够根据当前系统的UTC时间自动将当前的datetime转换为统一的时间格式,与地区无关。因此可以:

  • 将其他区的时间统一转换到UTC+8区的时间。

解决思路二:datetime类型有一个时区属性tzinfo,但是默认为none,所以是当前系统的UTC时间。因此可以:

  • 给datetime强制设置一个时区。
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')
    cutc = re.match(r'...([\+\-]\d+)...', tz_str).group(1)
    
    t1 = cday + timedelta(hours=8-int(cutc))
    t2 = cday.replace(tzinfo=timezone(timedelta(hours=int(cutc))))

    return t1.timestamp()
#   return t2.timestamp() 2种方法都可以

# 测试:
t1 = to_timestamp('2015-6-1 08:10:30', 'UTC+7:00')
assert t1 == 1433121030.0, t1

t2 = to_timestamp('2015-5-31 16:10:30', 'UTC-09:00')
assert t2 == 1433121030.0, t2
print('ok')

通过上述练习我们学习到了:

1、strptime函数的用法

2、正则表达式的用法

3、tzinfo的用法

4、timestamp函数的意义

猜你喜欢

转载自blog.csdn.net/handsomehuo/article/details/90718229