Discuss / Python / 一场关于正则表达式的复习。。。

一场关于正则表达式的复习。。。

Topic source

杨钰博

#1 Created at ... [Delete] [Delete and Lock User]
# -*- coding:utf-8 -*-

import re
from datetime import datetime, timezone, timedelta

def to_timestamp(dt_str, tz_str):
    # 用正则提取出时区偏移的小时和分钟
    tzre = re.split(r"[\+\-\:]", tz_str)
    # 因为给定的案例中正负值总是在第四位,所以不用正则了,直接调用tz_str[3],而时和分则利用刚才正则split的结果,定义替换时区的时候需要偏移的时差
    houroffset = int((tz_str[3]+tzre[1]))
    minoffset = int((tz_str[3]+tzre[2]))
    # 利用得到的偏移时差创建输入的dt_str的实际时区
    orgtz = timezone(timedelta(hours = houroffset,minutes = minoffset))

    # 先将第一个参数直接转换为datetime,但这时候其内在的时区属性是一个本地时区,于是调用replace强行将其换为刚才得到的时区,最后调用timestamp,自动转换为UTC时间戳
    return datetime.strptime(dt_str, '%Y-%m-%d %H:%M:%S' ).replace(tzinfo=orgtz).timestamp()
    # 事实上每个datetime对象还是有内置的时区属性,在调用timestamp方法的时候就是用这个时区属性做的转换,每个timestamp都是属于UTC的。


# 测试:
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

Reply