python 时间戳、时间字符串转换、时区处理方法
个人封装
# -*- coding: utf-8 -*-
# @Software: PyCharm
# @File: log.py
# @Author: xuefeng365
# @E-mail: 120158568@qq.com,
# @Site: www.51automate.cn
# @Time: 12月 28, 2022
from loguru import logger
import time
import datetime
class Operate_time():
def now_time(self,str_ = '%Y-%m-%d %H:%M:%S'):
'''
:return: 当前时间字符串
'''
return datetime.datetime.now().strftime(str_)
def time_str_to_second_timestamp(self,time_str, format_str='%Y-%m-%d %H:%M:%S'):
'''
时间字符串>毫秒级时间戳
@param time_str: 时间字符串
@param format_str: 时间格式化字符串
@return: float类型,时间戳
'''
# 转为秒级时间戳
t3_seconds = time.mktime(time.strptime(time_str, format_str))
return t3_seconds
def time_str_to_millisecond_timestamp(self, time_str, format_str='%Y-%m-%d %H:%M:%S'):
'''
时间字符串>级时间戳
@param time_str: 时间字符串
@param format_str: 时间格式化字符串
@return: float类型,时间戳
'''
t3_seconds = self.time_str_to_second_timestamp(time_str, format_str=format_str)
# 转为毫秒级
t3_milliseconds = float(str(t3_seconds * 1000).split(".")[0])
return t3_milliseconds
def timestamp_to_time_str(self,timestamp:float,type='seconds',format_str='%Y-%m-%d %H:%M:%S'):
'''
@return:
@param timestamp: float,时间戳
@param type: 默认转化秒级时间戳。 type=milliseconds,可转换毫秒级时间戳
@param format_str: 格式化时间字符戳
@return: 时间字符串
'''
# t = '%d-%02d-%02d %02d:%02d:%02d' % timestamp
# # t = '%d-%02d-%02d %02d:%02d:%02d' % time.localtime()[:6]
# # 获得当前时间时间戳
# now = int(time.time())
if type and type in 'seconds':
print(111)
now = float(timestamp)
elif type and type in 'milliseconds':
print(222)
now = float(timestamp/1000)
else:
raise '请输入正确的 时间戳类型,有2种(seconds、milliseconds)'
print(now)
timeArray = time.localtime(now)
time_str = time.strftime(format_str, timeArray)
return time_str
def time_to_timestamp(self, time_zone='', interval:int=0, type='seconds', format_str='%Y-%m-%d %H:%M:%S'):
'''
@param interval: int 间隔
@param type: weeks、days、hours、minutes、seconds、milliseconds、microseconds
@param time_zone: 选择时区 默认当前时区, 或者 0时区
@param format_str:
@return: list [秒级时间戳,毫秒级时间戳]
'''
if time_zone=='0':
# 0时区 时间
t = datetime.datetime.utcnow()
else:
# 当前时区时间
t = datetime.datetime.now()
if type=='weeks':
t3 = (t + datetime.timedelta(weeks=interval)).strftime(format_str)
elif type=='days':
t3 = (t + datetime.timedelta(days=interval)).strftime(format_str)
elif type=='hours':
t3 = (t + datetime.timedelta(hours=interval)).strftime(format_str)
elif type=='minutes':
t3 = (t + datetime.timedelta(minutes=interval)).strftime(format_str)
elif type=='seconds':
t3 = (t + datetime.timedelta(seconds=interval)).strftime(format_str)
elif type=='milliseconds':
t3 = (t + datetime.timedelta(milliseconds=interval)).strftime(format_str)
elif type=='microseconds':
t3 = (t + datetime.timedelta(microseconds=interval)).strftime(format_str)
else:
t3 = (t + datetime.timedelta(seconds=interval)).strftime(format_str)
# 转为秒级时间戳
t3_seconds = time.mktime(time.strptime(t3, format_str))
# 转为毫秒级
t3_milliseconds = float(str(t3_seconds * 1000).split(".")[0])
return [t3_seconds, t3_milliseconds]
def time_to_time_str(self, time_zone='', interval:int=0, type='seconds', format_str='%Y-%m-%d %H:%M:%S'):
'''
@param interval: int 间隔
@param type: weeks、days、hours、minutes、seconds、milliseconds、microseconds
@param time_zone: 选择时区 默认当前时区, 或者 0时区
@param format_str:
@return: list [秒级时间戳,毫秒级时间戳]
'''
if time_zone=='0':
# 0时区 时间
t = datetime.datetime.utcnow()
else:
# 当前时区时间
t = datetime.datetime.now()
if type=='weeks':
t3 = (t + datetime.timedelta(weeks=interval)).strftime(format_str)
elif type=='days':
t3 = (t + datetime.timedelta(days=interval)).strftime(format_str)
elif type=='hours':
t3 = (t + datetime.timedelta(hours=interval)).strftime(format_str)
elif type=='minutes':
t3 = (t + datetime.timedelta(minutes=interval)).strftime(format_str)
elif type=='seconds':
t3 = (t + datetime.timedelta(seconds=interval)).strftime(format_str)
elif type=='milliseconds':
t3 = (t + datetime.timedelta(milliseconds=interval)).strftime(format_str)
elif type=='microseconds':
t3 = (t + datetime.timedelta(microseconds=interval)).strftime(format_str)
else:
t3 = (t + datetime.timedelta(seconds=interval)).strftime(format_str)
return t3
a = Operate_time()
# 时间转时间戳 list [秒级,毫秒级] (可指定获取0时区或当前时区、可快速获取距离当前时间一定间隔的时间戳)
logger.info(a.time_to_timestamp())
# 时间转时间字符串(可指定获取0时区或当前时区、可自定义时间字符串格式、可快速获取距离当前时间一定间隔的时间字符串)
logger.info(a.time_to_time_str(time_zone='', interval=0, format_str='%Y-%m-%d %H:%M:%S'))
# 获取当前时间
logger.info(a.now_time())
# 时间字符串 转 秒级时间戳
logger.info(a.time_str_to_second_timestamp('2022-12-28 20:25:43'))
# 时间字符串 转 毫秒级时间戳
logger.info(a.time_str_to_millisecond_timestamp('2022-12-28 20:25:43'))
Faker库
利用 Faker生成常用的测试数据
官方文档:https://faker.readthedocs.io/en/stable/
from faker import Faker
fake = Faker(locale="zh_CN")
print('姓名:', fake.name())
print('手机号:', fake.phone_number())
phones = [fake.phone_number() for _ in range(5)] # 列表推导,把生成的数据组成一个列表
print('批量生成手机号:', phones)
print('邮箱:', fake.email())
print('MD5:', fake.md5())
print(fake.items())
print('年月日:', fake.date(pattern=' %Y-%m-%d'))
print('随机年份:', fake.year())
print('随机月份:', fake.month())
print('随机几号:', fake.day_of_month())
print('随机星期数:', fake.day_of_week())
print('随机时间字符串1:', fake.time(pattern='%Y-%m-%d %H:%M:%S'))
print('随机时间字符串2:', fake.time(pattern='%H:%M:%S'))
# -30y是过去30年前为开始日期,end_date表示结束到今天
print('过去某一天:', fake.date_between(start_date="-30y", end_date="today"))
print('今天:', fake.date_between_dates()) # 今天
print('日期和时间:', fake.date_time()) # 2021-05-14 19:36:00
print('当前日期时间:', fake.date_time_between_dates())
# print('某个区间内随机日期时 间:', fake.date_time_between_dates(datetime_start=datetime(1999, 2, 2, 10, 30, 20), dat
# etime_end = datetime(2000, 2, 2, 10, 30, 20)))
print('未来30天内的随机日期:', fake.future_date(end_date="+30d"), f'类型是:{type(fake.future_date(end_date="+30d"))},', str(fake.future_date(end_date="+30d")),'已转成字符串')
print('未来30天内的随机日期时间:', fake.future_datetime(end_date="+30d"),
f'类型是:{type(fake.future_datetime(end_date="+30d"))}') # 未来日期和时间)
print('过去的日期:', fake.past_date(start_date="-30m")) # 过去日期
print('过去的日期时间:', fake.past_datetime(start_date="-30d")) # 过去日期和时间
print('时间戳:', fake.unix_time(), f'类型是:{type(fake.unix_time())}')
print('时间戳(时分秒):', fake.time(), f'类型是:{type(fake.time())}')
print('随机md5:', fake.md5(), f'类型是:{type(fake.md5())}')