时间戳 ↔ 格式化时间 Python

该博客围绕Python中时间处理展开,介绍了直接输出格式化时间的方法,阐述了获取秒级、毫秒级、微秒级时间戳的原理,还讲解了格式化时间与时间戳之间的相互转换,包括秒级和毫秒级格式化字符串转对应位数时间戳等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

直接输出格式化时间

import time

print(time.strftime("%Y-%m-%d %H:%M:%S"))
# 2021-05-28 13:10:42

print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
# 2021-05-28 13:10:42

获取【秒级】、【毫秒级】、【微秒级】时间戳

import time

now = time.time()
import time

now = time.time()
print(now)
# 得到:1607046750.3136647
# 整数10位,小数6位,已经精确到【微秒级】

这里说一下个人的理解(如果不对,希望各位看官能够在评论区有理有据地喷我):
time.time()获取的小数为当前时间戳,表示从1970年1月1日起至执行操作时的总秒数。小数点前的是整秒数,小数点后地部分是不足一秒的计量,依次是十分之一秒、百分之一秒,… 。平时说的毫秒就是千分之一秒,既然要精确到毫秒,那么就需要对万分之一秒进行四舍五入,这样就拿到了精确的毫秒;同理,微秒(百万分之一秒)也是这样的,需要对千万分之一秒进行四舍五入。这也就是为什么小数点后有7位小数,而不是六位。

格式化时间 → 时间戳

格式化字符串(秒级) → 时间戳(10位)

import time

def str_second_datetime2int_10timestamp(str_second_datetime):
    """将字符串型【秒级】格式化时间 转为 【10位】整型时间戳"""
    ans_time_stamp = int(time.mktime(time.strptime(str_second_datetime, "%Y-%m-%d %H:%M:%S")))
    return ans_time_stamp

print(str_second_datetime2int_10timestamp('2019-08-17 18:39:15'))
# 得到:1566038355

格式化字符串(毫秒级) → 时间戳(13位)

import time
from datetime import datetime

def str_microsecond_datetime2int_13timestamp(str_microsecond_datetime):
    """将字符串型【毫秒级】格式化时间 转为 【13位】整型时间戳"""
    datetime_obj = datetime.strptime(str_microsecond_datetime, "%Y-%m-%d %H:%M:%S.%f")
    obj_stamp = int(time.mktime(datetime_obj.timetuple()) * 1000.0 + datetime_obj.microsecond / 1000.0) / 1000.0
    return obj_stamp
print(str_microsecond_datetime2int_13timestamp('2019-08-17 18:39:15.456'))
# 得到:1566038355456

时间戳 → 格式化时间

import time
import datetime

def int2datetime(int_float_timestamp):
    """
    有小数点:分离小数点,整数转为格式化时间,小数点直接跟在后面
    无小数点:从第10位进行分离,
    所以本函数只适用于时间戳整数位数大于9且小于11.
    """
    if '.' in str(int_float_timestamp):
        int_float = str(int_float_timestamp).split('.')
        date = time.localtime(int(int_float[0]))
        tempDate = time.strftime("%Y-%m-%d %H:%M:%S", date)
        secondafter = '.' + str(int_float[1])
        return str(tempDate) + secondafter
    else:
        if len(str(int_float_timestamp)) == 10:
            # 精确到秒
            timeValue = time.localtime(int_float_timestamp)
            tempDate = time.strftime("%Y-%m-%d %H:%M:%S", timeValue)
            datetimeValue = datetime.datetime.strptime(tempDate, "%Y-%m-%d %H:%M:%S")
        elif 10 < len(str(int_float_timestamp)) and len(str(int_float_timestamp)) < 15:
            # 精确到毫秒
            k = len(str(int_float_timestamp)) - 10
            timetamp = datetime.datetime.fromtimestamp(int_float_timestamp / (1 * 10 ** k))
            datetimeValue = timetamp.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]
        elif 14 < len(str(int_float_timestamp)) and len(str(int_float_timestamp)) < 18:
            # 精确到毫秒
            k = len(str(int_float_timestamp)) - 10
            timetamp = datetime.datetime.fromtimestamp(int_float_timestamp / (1 * 10 ** k))
            datetimeValue = timetamp.strftime("%Y-%m-%d %H:%M:%S.%f")
        else:
            return -1
        return datetimeValue
print(int2datetime(1607046750))  # 2020-12-04 09:52:30
print(int2datetime(1607046750.313))  # 2020-12-04 09:52:30.313
print(int2datetime(1607046750.3136647))  # 2020-12-04 09:52:30.3136647
print(int2datetime(1607046750313)) # 2020-12-04 09:52:30.313
print(int2datetime(16070467503136647)) # 2020-12-04 09:52:30.313665

符号含义

符号含义
%y两位数的年份表示(00-99)
%Y四位数的年份表示(000-9999)
%m月份(01-12)
%d月内中的一天(0-31)
%H24小时制小时数(0-23)
%I12小时制小时数(01-12)
%M分钟数(00=59)
%S秒(00-59)
%a本地简化星期名称
%A本地完整星期名称
%b本地简化的月份名称
%B本地完整的月份名称
%c本地相应的日期表示和时间表示
%j年内的一天(001-366)
%p本地A.M.或P.M.的等价符
%U一年中的星期数(00-53)星期天为星期的开始
%w星期(0-6),星期天为星期的开始
%W一年中的星期数(00-53)星期一为星期的开始
%x本地相应的日期表示
%X本地相应的时间表示
%Z当前时区的名称
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值