Discuss / Python / datetime.datetime(2022, 7, 24, 6, 44, 0, 197666) 请问最后一个数字是什么意思?

datetime.datetime(2022, 7, 24, 6, 44, 0, 197666) 请问最后一个数字是什么意思?

Topic source

alienation

#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):
    #第一步,将日期字符串转化为日期对象
    dt = datetime.strptime(dt_str,'%Y-%m-%d %H:%M:%S')
    #第二步,将时区字符串转化为数字对象
    re_utc = re.match(r'\w+(.\d+):(\d+)',tz_str)
    utc = int(re_utc.group(1)) + int(re_utc.group(2))/60
    #第三步,将时区属性输入日期对象
    tz_utc = timezone(timedelta(hours=utc)) 
    dt = dt.replace(tzinfo=tz_utc)
    #第四步,返回时间戳
    return dt.timestamp()
                       
# 测试:
t1 = to_timestamp('2015-6-1 08:10:30', 'UTC+7:00')
assert t1 == 1433121030.0

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

print('ok')

alienation

#3 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):
    #第一步,将日期字符串转化为日期对象
    dt = datetime.strptime(dt_str,'%Y-%m-%d %H:%M:%S')
    #第二步,将时区字符串转化为数字对象
    re_utc = re.match(r'\w+(.\d+):(\d+)',tz_str)
    utc_h = (re_utc.group(1))
    utc_m = int(re_utc.group(2))/60
    if utc_h[0] == '+':
        utc = int(utc_h) + utc_m
    else:
        utc = int(utc_h) - utc_m
    print(utc)
    #第三步,将时区属性输入日期对象
    tz_utc = timezone(timedelta(hours=utc)) 
    dt = dt.replace(tzinfo=tz_utc)
    #第四步,返回时间戳
    print(dt.timestamp())
    return dt.timestamp()
                       
# 测试:
t1 = to_timestamp('2015-4-19 12:00:00', 'UTC+08:00')
assert t1 == 1429416000.0

t2 = to_timestamp('2015-4-19 00:30:00', 'UTC-03:30')
assert t2 == 1429416000.0

print('ok')

另外通过对象实例化方式定义的datetime对象默认时区为系统时区

即datetime(2015,8,30,14,25)这个对象的默认时区是东八区,转化为的时间戳也是东八区条件下转化的时间戳

alienation

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

谢谢老师回复,最后一个数字是毫秒

年少的你

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

请问为什么 group(1)是+7,而不是UTC

年少的你

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

为什么加了if

alienation

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

因为utc被我隔在括号外了,括号内的(.\d+)表示任意符号加至少一个数字

alienation

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

if 是用来判断时区是东区还是西区,东区加西区减

alienation

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

准确地说,是西区的的话本身是-8,后边的分钟必须和小时符号一致

也可以先判断纯量,然后最后给纯量加上正负


  • 1

Reply