常用的时间模块的方法(时间戳小用法、python 中的数据库时间转化、)
.
.
.
时间戳小用法
import time
batch = str(int(time.time())) # 先把时间戳的小数点后面的数字去掉,再转成字符串
print(type(batch), batch)
# <class 'str'> 1686273113
----------------------------------------------------------------------------
import datetime
current_date = datetime.datetime.now() # 是个时间对象
print(type(current_date), current_date)
# <class 'datetime.datetime'> 2023-06-09 09:14:24.316823
current_date = datetime.datetime.now().strftime("%Y%m%d") # 转成字符串了
print(type(current_date), current_date)
# <class 'str'> 20230609
# 这个有用,可以作为文件后缀
current_date = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
print(current_date) # 20230609130610
.
.
.
.
.
.
.
.
.
python 中的数据库时间转化
# 参考博客 https://www.jb51.net/article/241891.htm
datetime模块中几个常用的类如下:
date:日期类,常用属性:year/month/day
time:时间类,常用属性:hour/minute/second/microsecond
datetime:日期时间类 常用属性:now/today/
timedelta:时间间隔类,即两个时间点之间的时间长度
----------------------------------------------------
# 从数据库拿出的时间,秒后面还有数字,不想要这个数字怎么办?
# 直接把时间对象.strftime(%Y/%m/%d %H:%M:%S) 转成字符串 秒后面的数字就没了
import datetime
today=datetime.datetime.now()
datetime1=today-datetime.timedelta(seconds=10) # 减10秒
datetime2=today-datetime.timedelta(minutes=10) # 减10分钟
datetime3=today-datetime.timedelta(hours=1) # 减1小时
datetime4=today-datetime.timedelta(days=7) # 减1天
datetime5=today-datetime.timedelta(weeks=1) # 减1周
datetime6=today.strftime('%Y-%m-%d') # 将时间格式化为字符串
print('today:',today)
print('second:',datetime1)
print('minute:',datetime2)
print('hour:',datetime3)
print('day:',datetime4)
print('week:',datetime5)
print('时间格式化为字符串:',datetime6)
----------------------------------------------------------------
import dateutil.relativedelta
# 这条将字符串转成时间对象的命令重要!!!
# 数据库需要写入的是时间对象,但有时候我们得到的是字符串,就要自己转一下了!!!
datetime7= datetime.datetime.strptime(datetime6, '%Y-%m-%d') # 将字符串格式为时间
datetime8 = datetime7 - dateutil.relativedelta.relativedelta(seconds=10) # 减10秒
datetime9 = datetime7 - dateutil.relativedelta.relativedelta(minutes=10) # 减10分钟
datetime10 = datetime7 - dateutil.relativedelta.relativedelta(hours=1) # 减1小时
datetime11 = datetime7 - dateutil.relativedelta.relativedelta(days=1) # 减1天
datetime12 = datetime7 - dateutil.relativedelta.relativedelta(months=1) # 减一个月
datetime13 = datetime7 - dateutil.relativedelta.relativedelta(years=1) # 减一年
print('字符串格式为时间:',datetime7)
print('second2:',datetime8)
print('minute2:',datetime9)
print('hour2:',datetime10)
print('day2:',datetime11)
print('month2:',datetime12)
print('year:',datetime13)
.
.
.
.
.
def get_weather_by_place_name_and_datetime(place_name: str, date_time: str):
one_day = timedelta(days=1) # 获取时间间隔对象
# print(one_day,type(one_day)) # 1 day, 0:00:00 <class 'datetime.timedelta'>
date_time = datetime.strptime(date_time, "%Y-%m-%d %H:%M:%S")
# 转成结构化时间,第二个参数时间格式必须要和第一个参数的时间格式相匹配!!!
return {'place_name': place_name,
'weather_detail': [
{'datetime': (date_time - one_day).strftime('%Y-%m-%d'), 'result': '多云', 'temperature': 23,
'wind': '1级', 'day': (date_time - one_day).weekday()},
{'datetime': date_time.strftime('%Y-%m-%d'), 'result': '多云', 'temperature': 23, 'wind': '1级',
'day': '今天'},
{'datetime': (date_time + one_day).strftime('%Y-%m-%d'), 'result': '多云', 'temperature': 23,
'wind': '1级', 'day': (date_time + one_day).weekday()},
{'datetime': (date_time + (2 * one_day)).strftime('%Y-%m-%d'), 'result': '多云', 'temperature': 23,
'wind': '1级', 'day': (date_time + (2 * one_day)).weekday()},
{'datetime': (date_time + (3 * one_day)).strftime('%Y-%m-%d'), 'result': '多云', 'temperature': 23,
'wind': '1级', 'day': (date_time + (3 * one_day)).weekday()},
{'datetime': (date_time + (4 * one_day)).strftime('%Y-%m-%d'), 'result': '多云', 'temperature': 23,
'wind': '1级', 'day': (date_time + (4 * one_day)).weekday()},
]
}
.
.
.
import datetime
date_str = '2022-03-05'
date_obj = datetime.datetime.strptime(date_str, '%Y-%m-%d')
weekday = date_obj.weekday()
print(weekday) # 输出 6
# `weekday()`方法获取星期几,返回值为0~6,分别代表星期一到星期天。
.
.
.
.
.
.
注意!!!!!!!!!!!!!!!!!!
# 模型表里面自动生成的时间秒后面还会带数字,如果想让返给前端的时间没有多余的数字
# 可以在序列化类里面重写该字段!!!
sign_time = serializers.DateTimeField(format='%Y-%m-%d %X')
---------------------------------------
# 注意!!!!!!!!!!!!!!!!!!
数据库里面如果是DateField类型
date_time = models.DateField(auto_now_add=True, verbose_name='日期')
模型表的一条数据对象点时间字段 得到的是时间对象 如果时间字段是年月日时间对象
在序列化的时候不会出问题 能正常转成2023-04-01
# 如果是年月日时分秒时间对象 在序列化的时候会出问题 转成的字符串格式不对!!!
# 所以要么像上面一样在序列化类里面重写该字段 或者还有一种办法 在模型表定制返回格式
exam_start_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间', null=True)
def exam_start_time1(self):
return self.exam_start_time.strftime('%Y-%m-%d %H:%M:%S')
# 序列化的时候就直接点exam_start_time1字段就行了
.
.
.
.
.
.
.
操作openpyxl模块时,excel表里面的时间处理
# 常规模式,openpyxl模块打开后,接收到的是字符串
# 如果是日期模式,openpyxl模块打开后,接收到的是日期对象
import openpyxl
wb = openpyxl.load_workbook('src/static/teng_20230619175855.xlsx') # 打开
sheet1 = wb.worksheets[0] # 获取工作表对象
for row in sheet1.iter_rows(min_row=3, values_only=True):
for i in range(0, 17):
value = row[i]
print(value,type(value))
"""
鑫艺程清运码头 <class 'str'>
沪EK0307 <class 'str'>
2023-03-29 21:39:05 <class 'datetime.datetime'>
合格 <class 'str'>
112.94 <class 'float'>
122.94 <class 'float'>
"""
.
.
.
.
.
# 参考博客 https://www.jb51.net/article/241891.htm
datetime模块中几个常用的类如下:
date:日期类,常用属性:year/month/day
time:时间类,常用属性:hour/minute/second/microsecond
datetime:日期时间类 常用属性:now/today/
timedelta:时间间隔类,即两个时间点之间的时间长度
----------------------------------------------------
# 从数据库拿出的时间,秒后面还有数字,不想要这个数字怎么办?
# 直接把时间对象.strftime(%Y/%m/%d %H:%M:%S) 转成字符串 秒后面的数字就没了
import datetime
today=datetime.datetime.now()
datetime1=today-datetime.timedelta(seconds=10)#减10秒
datetime2=today-datetime.timedelta(minutes=10)#减10分钟
datetime3=today-datetime.timedelta(hours=1)#减1小时
datetime4=today-datetime.timedelta(days=7)#减1天
datetime5=today-datetime.timedelta(weeks=1)#减1周
datetime6=today.strftime('%Y-%m-%d') #将时间格式化为字符串
print('today:',today)
print('second:',datetime1)
print('minute:',datetime2)
print('hour:',datetime3)
print('day:',datetime4)
print('week:',datetime5)
print('时间格式化为字符串:',datetime6)
import dateutil.relativedelta
datetime7= datetime.datetime.strptime(datetime6, '%Y-%m-%d')#将字符串格式为时间
datetime8 = datetime7 - dateutil.relativedelta.relativedelta(seconds=10)#减10秒
datetime9 = datetime7 - dateutil.relativedelta.relativedelta(minutes=10)#减10分钟
datetime10 = datetime7 - dateutil.relativedelta.relativedelta(hours=1)#减减1小时
datetime11 = datetime7 - dateutil.relativedelta.relativedelta(days=1)#减1天
datetime12 = datetime7 - dateutil.relativedelta.relativedelta(months=1)#减一个月
datetime13 = datetime7 - dateutil.relativedelta.relativedelta(years=1)#减一年
print('字符串格式为时间:',datetime7)
print('second2:',datetime8)
print('minute2:',datetime9)
print('hour2:',datetime10)
print('day2:',datetime11)
print('month2:',datetime12)
print('year:',datetime13)
.
.
.
.
# 模型表里面自动生成的时间秒后面还会带数字,如果想让返给前端的时间没有多余的数字
# 可以在序列化类里面重写该字段!!!
sign_time = serializers.DateTimeField(format='%Y-%m-%d %X')
# 注意
数据库里面如果是DateField类型
date_time = models.DateField(auto_now_add=True, verbose_name='日期')
模型表的一条数据对象点时间字段 得到的是时间对象 如果时间字段是年月日时间对象
在序列化的时候不会出问题 能正常转成2023-04-01
# 如果是年月日时分秒时间对象 在序列化的时候会出问题 转成的字符串格式不对!!!
# 所以要么像上面一样在序列化类里面重写该字段 或者还有一种办法 在模型表定制返回格式
exam_start_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间', null=True)
def exam_start_time1(self):
return self.exam_start_time.strftime('%Y-%m-%d %H:%M:%S')
# 序列化的时候就直接点exam_start_time1字段就行了
.
.
.
.
.
# 注意前端传来的时间要么是int类型的时间戳,或者是固定格式的字符串,后端比较时间大小或者时间的加减,
# 都需要转换成datetime类型才能进行操作
if 'create_time_max' in request.json.keys():
filters.append(value_range_filter(key=Device.create_time,
max_value=datetime.fromtimestamp(request.json['create_time_max']),
smaller_eq=True
))
if 'create_time_min' in request.json.keys():
filters.append(value_range_filter(key=Device.create_time,
min_value=datetime.fromtimestamp(request.json['create_time_min']),
bigger_eq=True
))
.
.
.
.
.
.
.
.
.
.
.
.
.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY