Python之time模块的时间戳,时间字符串格式化与转换方法(13位时间戳)

总结Python之time模块的时间戳(13位时间戳),时间字符串格式化与转换方法-直接自动化封装函数调用

-【Python处理时间和时间戳的内置模块就有time和datetime两个模块】

  • *关于时间戳的几个概念 时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。
    时间元组(struct_time),包含9个元素。

       time.struct_time(tm_year=2017, tm_mon=10, tm_mday=1, tm_hour=14,
       tm_min=21, tm_sec=57, tm_wday=6, tm_yday=274, tm_isdst=0)
       时间格式字符串,字符串形式的时间。 time模块与时间戳和时间相关的重要函数 time.time()
       生成当前的时间戳,格式为10位整数的浮点数。 time.strftime()根据时间元组生成时间格式化字符串。
       time.strptime()根据时间格式化字符串生成时间元组。time.strptime()与time.strftime()为互操作。
       time.localtime()根据时间戳生成当前时区的时间元组。 time.mktime()根据时间元组生成时间戳。*
    
import datetime
import time


def get_float_time_stamp():
    datetime_now = datetime.datetime.now()  # 获取系统当前时间
    return datetime_now.timestamp()


def get_time_stamp16():
    """获取当前时间转换成16位的时间戳

    :return: 返回当前时间戳(16位)
    """
    # 生成16时间戳   eg:1597195825782642
    datetime_now = datetime.datetime.now()
    # print(datetime_now)

    # 10位,时间点相当于从UNIX TIME的纪元时间开始的当年时间编号
    date_stamp = str(int(time.mktime(datetime_now.timetuple())))

    # 6位,微秒
    data_microsecond = str("%06d" % datetime_now.microsecond)

    date_stamp = date_stamp + data_microsecond
    return int(date_stamp)


def get_time_stamp13():
    """获取当前时间并转换成13位的时间戳

    :return: 返回当前时间戳(13位)
    """
    # 生成13时间戳   eg:1597195825782
    datetime_now = datetime.datetime.now()

    # 10位,时间点相当于从UNIX TIME的纪元时间开始的当年时间编号
    date_stamp = str(int(time.mktime(datetime_now.timetuple())))

    # 3位,微秒
    data_microsecond = str("%03d" % datetime_now.microsecond)[0:3]

    date_stamp = date_stamp + data_microsecond
    return int(date_stamp)


def stampToTime(stamp):
    """时间戳转换为当前时间格式
    如:2020-08-12 09:36:40.604
    :param stamp: 时间戳值
    :return:
    """
    datatime = time.strftime("%Y-%m-%d %H:%M:%S",
                             time.localtime(float(str(stamp)[0:10]))
                             )  # 将指定时间戳转换为其他日期格式(如%Y-%m-%d %H:%M:%S)
    datatime = datatime + '.' + str(stamp)[10:]
    return datatime


def TimeTostamp():
    """获取三天前的时间格式转换为13位时间戳
    如:2020-08-12 09:36:40.604
    :return:时间戳值
    """
    # 先获得时间数组格式的日期
    threeDayAgo = (datetime.datetime.now() - datetime.timedelta(days=3))
    # 10位,时间点相当于从UNIX TIME的纪元时间开始的当年时间编号
    date_stamp = str(int(time.mktime(threeDayAgo.timetuple())))
    # 3位,微秒
    data_microsecond = str("%03d" % threeDayAgo.microsecond)[0:3]
    date_stamp3 = date_stamp + data_microsecond
    return int(date_stamp3)


def TimeTostamp30():
    """获取一个月前的时间格式转换为13位时间戳
    如:2020-08-12 09:36:40.604
    :return:时间戳值
    """
    # 先获得时间数组格式的日期
    OneMonthAgo = (datetime.datetime.now() - datetime.timedelta(days=30))
    # 10位,时间点相当于从UNIX TIME的纪元时间开始的当年时间编号
    date_stamp = str(int(time.mktime(OneMonthAgo.timetuple())))
    # 3位,微秒
    data_microsecond = str("%30d" % OneMonthAgo.microsecond)[0:3]
    date_stamp30 = date_stamp + data_microsecond
    return int(date_stamp30 * 1000)


def TimeToStamp(year: int, month: int, day: int, time1: str):
    """将指定时间格式转换为时间戳(法一)

    :param year:年 %Y
    :param month:月 %m
    :param day:日 %d
    :param time1:时分秒  %H:%M:%S
    :return:指定时间戳
    """
    # today = datetime.date.today()  # 拿到当前年月日
    today = datetime.date(year, month, day)
    while 1:  # 不指定次数循环
        new_today = str(today).split('-')  # 按-切片放入列表
        week = datetime.datetime.strptime(''.join(new_today), "%Y%m%d").weekday()  # 转换成20201212格式
        if week == 1 or week == 3:  # 判断是不是为指定星期X
            # time1 = time.strftime('%H:%M:%S')  # 拿到当前时分秒
            time_stamp = time.strptime(f'{today} {time1}', '%Y-%m-%d %H:%M:%S')  # 年月日时分秒格式化元组
            return int(str(int(time.mktime(time_stamp))) + str(time.time()).split('.')[-1][
                                                           :3])  # 年月日时分秒转换为10位时间戳再加上10位时间戳小数点后三位,等于13位
        today += datetime.timedelta(days=1)  # 年月日加1天


def TimeToStamp13(TimeStamp: str, format_string="%Y-%m-%d %H:%M:%S"):
    """(法二)
    将时间字符串转换为13位时间戳,时间字符串默认为2017-10-01 13:37:04格式
    :param TimeStamp: 时间字符串
    :param format_string: 时间字符串格式 默认为%Y-%m-%d %H:%M:%S
    :return: 13位时间戳
    """
    time_array = time.strptime(TimeStamp, format_string)
    time_stamp = int(time.mktime(time_array))
    return int(time_stamp * 1000)


def timeTostamp13(data: str, format_string='%Y-%m-%d %H:%M:%S.%f'):
    """将时间字符串转换为13位时间戳,时间字符串默认为 2021-05-08 17:03:12.59格式

    :param data:时间字符串
    :param format_string:时间字符串(毫秒)默认为 2021-05-08 17:03:12.59格式
    :return:13位时间戳
    """
    time_array = datetime.datetime.strptime(data, format_string)
    time_stamp = int(datetime.datetime.timestamp(time_array) * 1000)
    return time_stamp

# if __name__ == '__main__':
#     a1 = get_time_stamp16()
#     print(a1)
#     # print(stampToTime(a1))
#     a2 = get_time_stamp13()
#     print(a2)
#     print(stampToTime(a2))
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SzetoZeZe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值