datetime导入及简单使用
导包两种的方法
import datetime
#调用 例如获取当前时间
time=datetime.datetime.now()
两者的区别就在于少导入一个datetime
from datetime import datetime
time=datetime.now()
datetime 对象
获取当前时间 年月日 时分秒类型
import datetime
#获取当前时间 年月日形式
time2=datetime.datetime.now()
print('当前时间:',time2)
print('它的类型是:',type(time2))
和str之间的转换
strftime和strptime 一个不支持中文一个支持中文
import datetime
time2=datetime.datetime.now()
# 通过split()进行切割
str1=str(time2).split(".")[0]
#通过datetime里的strftime方法
str2=datetime.datetime.strftime(datetime.datetime.now(),'%Y-%m-%d %H:%M:%S')
str3=datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print('切割获取的',str1)
print('第一种',str2)
print('第二种',str3)
print('类型是:',type(str1))
strftime和strptime
import datetime
time2=datetime.datetime.now()
# 转换成指定格式,不支持中文 可以使用占位符输出
str1 = time2.strftime('%Y{}%m{}%d{} %H{}%M{}%S{}%f{} %a').format('年','月','日','时','分','秒','毫秒')
# 将字符串再转换为datetime,第一个参数指定字符串,第二个指定格式
now_datetime = datetime.strptime(str1, '%Y年%m月%d日 %H时%M分%S秒%f毫秒 %a')
# 再转换为 Y年-m月-d日 H时:M分:S秒格式
time3=datetime.isoformat(now_datetime)
date 对象
import datetime
# 实例对象,获取今天的日期
now_date1 = datetime.date.today()
print(now_date1)
print('类型是:',type(now_date1))
# 将datetime转换为date
now_date2 = datetime.datetime.now().date()
print(now_date2)
print('类型是:',type(now_date2))
转换成当前时间戳
#时间戳一般都是通过time获取的
import time
time1=time.time()
print(time1)
# datetime.now()获取到的当前时间可以通过转换成时间戳
import datetime
time2=datetime.datetime.now()
# 转换成时间戳,类型是float
now_time = time2.timestamp()
print('转换成时间戳:',now_time)
常用的格式符号
格式符号 | 作用 |
---|---|
%Y | 表示年份 例如:2022 |
%m | 返回月份 范围[0,12] |
%d | 返回的是当前时间是当前月的第几天 |
%H | 以24小时制表示当前小时 |
%M | 返回分钟 范围 [0,59] |
%S | 返回秒数 范围 [0,6] |
%f | 微秒的表示: 范围: [0,999999] |
%a | 星期的英文单词的缩写:如星期一, 则返回 Mon |
更多的格式符号
格式符号 | 作用 |
---|---|
%a | 星期的英文单词的缩写:如星期一, 则返回 Mon |
%A | 星期的英文单词的全拼:如星期一,返回 Monday |
%b | 月份的英文单词的缩写:如一月, 则返回 Jan |
%B | 月份的引文单词的缩写:如一月, 则返回 January |
%c | 返回datetime的字符串表示,如03/08/15 23:01:26 |
%d | 返回的是当前时间是当前月的第几天 |
%f | 微秒的表示: 范围: [0,999999] |
%H | 以24小时制表示当前小时 |
%I | 以12小时制表示当前小时 |
%j | 返回 当天是当年的第几天 范围[001,366] |
%m | 返回月份 范围[0,12] |
%M | 返回分钟数 范围 [0,59] |
%P | 返回是上午还是下午–AM or PM |
%S | 返回秒数 范围 [0,61]。。。手册说明的 |
%U | 返回当周是当年的第几周 以周日为第一天 |
%W | 返回当周是当年的第几周 以周一为第一天 |
%w | 当天在当周的天数,范围为[0, 6],6表示星期天 |
%x | 日期的字符串表示 :03/08/15 |
%X | 时间的字符串表示 :23:22:08 |
%y | 两个数字表示的年份 15 |
%Y | 四个数字表示的年份 2015 |
%z | 与utc时间的间隔 (如果是本地时间,返回空字符串) |
%Z | 时区名称(如果是本地时间,返回空字符串) |
Mysql数据库的datetime操作
str形式可以用于加入到mysql数据库的datetime字段中。例如
import datetime
str2=datetime.datetime.strftime(datetime.datetime.now(),'%Y-%m-%d %H:%M:%S')
sql=f"insert into time_shishi (time,name) values('{str2}','yi')"
class Times:
def post_time(self):
try:
db.update(sql)
db.commit()
print('添加成功')
except Exception as e:
print(e)
db.rollback()
timea=Times()
timea.post_time()
mysql的datetime类型
create table s_time
(
time datetime DEFAULT CURRENT_TIMESTAMP,
)
DEFAULT CURRENT_TIMESTAMP 默认为当前时间
实例题
查询指定用户(uid)的每月(time)总分数(scoure)
可以使用date_format函数进行分组
date_format函数取time字段只取到月份,sum()算出分数总和 where条件指定uid,group by根据date分组
select date_format(time,'%Y-%m') as date,sum(scoure) as score from s_time where uid=1 group by date