因为datetime比time好用一些,所以本文暂时不涉及time
时间表示的3种格式
- float
- str
- format是一个str,例如
'%Y-%m-%d %H:%M:%S'
- %y年份中的后两位,%Y年份4位数年
- %m :2位数月
- %d: 2位数日
- %H: 24进制小时。%I:12进制小时
- %M: 2位数分钟
- %S: (秒,可以是60和61,表示闰秒),%S.%f精确到毫秒
- %a周几(简称) %A周几(全称), %w:周几,0代表周日。%u:周几,7代表周日。
- %W一年中的第几周,每年第一个周一之前的几天认为是“第0周”, %U一年中的第几周,每年第一个周日之前的几天认为是“第0周”
- %j 一年中的第几天,范围是001-366
- %b月份简写 %B月份全称
- %p 上午还是下午, 值是AM或PM
- %c 完整的日期和时间
- format是一个str,例如
- datetime.datetime
- datetime.datetime.now()
相互转化:
- float –> datetime:
datetime.datetime.fromtimestamp(float)
- datetime –> str:
datetime.datetime.strftime(now,'%Y-%m-%d') now.strftime('%Y-%m-%d')
- str –> datetime: datetime.datetime.strptime(str, format)
datetime.datetime.strptime('2018-02-03','%Y-%m-%d')
datatime
创建
- 直接生成
import datetime datetime.datetime(2017,11,12,18,5,9)
- now
datetime.datetime.now()
- strptime
- parse:好处是不用自定义格式
from dateutil.parser import parse parse('2016/11/12 12:00:03')
应用
now=datetime.datetime.now()
now.year,now.month,now.day # 年月日
now.weekday() # 一周中的第几天,周一是0,周日是6
timedelta
timedelta1
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
datetime.timedelta类可以加减乘除,示例代码:
import datetime
year = datetime.timedelta(days=365)
ten_years = year *10
nine_years = ten_years - year
timedelta2
两个datetime.datetime可以相减,返回datetime.delta 示例代码:
import datetime
d1 = datetime.datetime.strptime('2015-03-05 17:41:20', '%Y-%m-%d %H:%M:%S')
d2 = datetime.datetime.strptime('2015-03-02 17:41:20', '%Y-%m-%d %H:%M:%S')
delta = d1 - d2
print(delta.days) # 返回整数
delta.seconds # 也是返回整数
delta.microseconds
delta.total_seconds() # 返回float
时区问题
1 时区对象
import pytz
pytz.all_timezones#打印全部时区
tz=pytz.timezone('Asia/Shanghai')#返回时区对象
2 datetime中建立时区
tz=pytz.timezone('Asia/Shanghai')
ddt = datetime.datetime(2014, 8, 20, 10, 0, 0, 0)
ddt=tz.localize(ddt)
平均日出时间时区
ddt1 = datetime.datetime(2014, 8, 20, 10, 0, 0, 0, pytz.timezone('Asia/Shanghai'))
这里有个大坑:这个时间是根据平均日出时间(Local Mean Time)的时区,所以不要轻易这么用,除非特殊需求
3 时区换算
ddt2=ddt1.astimezone(pytz.timezone('Europe/London'))
小的注意
ddt1==ddt2
- output:
True
calendar
import calendar
calendar_month = calendar.month(theyear=2022, themonth=10)
# str 格式,一个月的日历
print(calendar_month)
# 输出:
'''
October 2022
Mo Tu We Th Fr Sa Su
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
'''
# 打印一整年的
calendar_year = calendar.calendar(theyear=2022)
print(calendar_year)
HTML 格式的日历
calendar_month_html = calendar.HTMLCalendar(firstweekday=0). \
formatmonth(theyear=2022, themonth=10, withyear=True)
一整年的
calendar_year_html = calendar.HTMLCalendar(firstweekday=0). \
formatyear(theyear=2022, width=3)
参考文献
https://docs.python.org/3/