常用的时间模块的方法(时间戳小用法、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)

image
.
.
.
.
.


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'>
"""


image
.
image
.
.
.
.

# 参考博客 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)

image
.
.
.
.

# 模型表里面自动生成的时间秒后面还会带数字,如果想让返给前端的时间没有多余的数字
# 可以在序列化类里面重写该字段!!!
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
                                          ))

.
.
.
.
.
.
.
.
.
.
.
.
.

posted @   tengyifan  阅读(27)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· 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
点击右上角即可分享
微信分享提示