Python时间戳和时间类型及其互相转换

python

1 常用的时间模块

time是模块提供的功能是更加接近于操作系统层面的。time 模块是围绕着 Unix Timestamp 进行的。

该模块主要包括一个类 struct_time,另外其他几个函数及相关常量。 需要注意的是在该模块中的大多数函数是调用了所在平台C library的同名函数, 所以要特别注意有些函数是平台相关的,可能会在不同的平台有不同的效果。

python">import time

time_str = "2020-12-31 09:30:18"

t_struct = time.strptime(time_str, "%Y-%m-%d %H:%M:%S") # 生成time_str对应的struct_time对象

t_str = time.strftime("%Y-%m-%d %H:%M:%S", t_struct) # 生成t_struct对应格式的字符串时间

t_stamp = time.mktime(t_struct) # 生成t_struct对应的时间戳

print(t_struct)

print(t_str)

print(t_stamp)

# struct_time有以下常用属性

print(t_struct.tm_year) # 年份

print(t_struct.tm_mon) # 月份

print(t_struct.tm_mday) # 日期

print(t_struct.tm_wday) # 星期

print(t_struct.tm_hour) # 小时

print(t_struct.tm_min) # 分钟

print(t_struct.tm_sec) # 秒钟

datetime可以理解为对 time 进行了封装,提供了更多实用的函数。在datetime 模块中包含了几个类:

  • timedelta 主要用于计算时间跨度
  • tzinfo 时区相关
  • time 只关注时间
  • date只关注日期
  • datetime 同时有时间和日期

关系型数据库DateTime类型在python对应的类型为datetime.datetime类型

import datetime

time_stamp = 1609378218

time_str = "2020-12-31 09:30:18"

dd_struct = datetime.datetime.strptime(time_str,"%Y-%m-%d %H:%M:%S") # 转化为struct_time对象

dd_obj = datetime.datetime.fromtimestamp(time_stamp) # 将时间戳转换为datetime

dd_struct1 = dd_obj.timetuple() # 将datetime对象转化为struct_time对象

dd_str = dd_obj.strftime("%Y-%m-%d %H:%M:%S") # 将datetime对象转化为str格式

dd_stamp = dd_obj.timestamp() # 将datetime对象转为时间戳

print(dd_struct)

print(dd_obj)

print(dd_struct1)

print(dd_str)

print(dd_stamp)

# 所有datetime下的时间类型都有timetuple()方法可以将其转化为struct_time对象,进而可以用time模块将其转换为任意类型

date_obj = datetime.date(year=2020, month=12, day=31)

time_obj = datetime.time(hour=9, minute=30, second=18)

datetime_obj = datetime.datetime(year=2020, month=12, day=31, hour=9, minute=30, second=18)

# datetime对象有以下常用属性

print(datetime_obj.year) # 年份

print(datetime_obj.month) # 月份

print(datetime_obj.day) # 日期

print(datetime_obj.hour) # 小时

print(datetime_obj.minute)# 分钟

print(datetime_obj.second)# 秒种

2. 常用时间类型之间的转换

常用的时间类型有 时间戳(int/float),struct_time对象,datetime.date对象,datetime.datetime对象

2.1 Str格式 和 时间戳

# 使用time 由 str 转换为 时间戳

timeStr = '2020-12-31 09:30:18'

timeArray = time.strptime(timeStr, "%Y-%m-%d %H:%M:%S")

timeStamp = time.mktime(timeArray)

print(timeStamp) # 1609378218.0

# 使用datetime 由 str 转换为 时间戳

dateArray = datetime.datetime.strptime(timeStr, "%Y-%m-%d %H:%M:%S")

timeStamp = dateArray.timestamp()

print(timeStamp) # 1609378218.0

# 使用time 由 时间戳 转换为 str

timeStamp = 1609378218

timeArray = time.localtime(timeStamp)

timeStr = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)

print(timeStr) # 2020-12-31 09:30:18

# 使用datetime 由 时间戳 转换为 str

dateArray = datetime.datetime.fromtimestamp(timeStamp)

timeStr = dateArray.strftime("%Y-%m-%d %H:%M:%S")

print(timeStr) # 2020-12-31 09:30:18

2.2 datetime对象和时间戳

# 由 时间戳 转换为 datetime对象 (转换为 str格式)

timeStamp = 1609378218

dateArray = datetime.datetime.fromtimestamp(timeStamp)

timeStr = dateArray.strftime("%Y-%m-%d %H:%M:%S")

print(timeStr) # 2020-12-31 09:30:18

# 使用datetime,指定utc时间,相差8小时

timeStamp = 1609378218

dateArray = datetime.datetime.utcfromtimestamp(timeStamp)

timeStr = dateArray.strftime("%Y-%m-%d %H:%M:%S")

print(timeStr) # 2020-12-31 09:30:18

# 由 datetime对象 转换为 时间戳

dateArray = datetime.datetime(year=2020, month=12, day=31, hour=9, minute=30, second=18)

timeStamp = dateArray.timestamp()

print(timeStamp) # 1609378218.0

2.3 str类型转换为其他格式的str

# 原始字符类型的时间

ts = '2020-12-31 09:30:18'

# 转为struct_time

timeArray = time.strptime(ts, "%Y-%m-%d %H:%M:%S")

# 转为其它显示格式

timeStr = time.strftime("%Y/%m/%d %H:%M:%S", timeArray)

print(timeStr)

3. 生成特定时间

# time获取当前时间戳

now = int(time.time())

print(now)

# 获取当前时间对象

timeArray = time.localtime(now)

print(timeArray)

# 获取当前时间str

timeStr = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)

print(timeStr)

# datetime获取当前时间

now = datetime.datetime.now()

print(now)

# 获取当前时间str

timeStr = now.strftime("%Y-%m-%d %H:%M:%S")

print(timeStr)

# 获取当前时间戳

timeStamp = now.timestamp()

timeStamp1 = time.mktime(now.timetuple())

print(timeStamp)

print(timeStamp1)

# 获取当天零时时间戳

time_begin = time.mktime(datetime.date.today().timetuple())

print(time_begin)

# 当月第一天零时时间戳

month_begin = datetime.datetime(now.year, now.month, 1, 0, 0, 0)

month_begin = month_begin.timestamp()

print(month_begin)

# 下月第一天零时时间戳

month = now.month

month = 0 if month == 12 else month

future_month_first = datetime.datetime(now.year, month + 1, 1, 0, 0, 0)

future_month_first = future_month_first.timestamp()

print(future_month_first)

# 当月最后一天最后一秒时间戳

month = now.month

month = 0 if month == 12 else month

future_month_first = datetime.datetime(now.year, month + 1, 1, 23, 59, 59)

month_end = future_month_first - datetime.timedelta(days=1)

month_end = month_end.timestamp()

print(month_end)

# 上个月最后一天最后一秒时间戳

this_month_first = datetime.datetime(now.year, now.month, 1, 23, 59, 59)

last_month_last = this_month_first - datetime.timedelta(days=1)

last_month_last = last_month_last.timestamp()

print(last_month_last)

以上是 Python时间戳和时间类型及其互相转换 的全部内容, 来源链接: utcz.com/z/389474.html

回到顶部