Python3的日期/时间处理模块

datetime的格式化符号

格式化符号

表示

%y

两位数的年份表示(00-99)

%Y

四位数的年份表示(000-9999)

%m

月份(01-12)

%d

日(0-31)

%H

24小时制小时数(0-23)

%I

12小时制小时数(01-12)

%M

分钟数(00=59)

%S

秒(00-59)

%a

本地简化星期名称

%A

本地完整星期名称

%b

本地简化的月份名称

%B

本地完整的月份名称

%c

本地相应的日期表示和时间表示

%j

年内的一天(001-366)

%p

本地A.M.或P.M.的等价符

%U

一年中的星期数(00-53)星期天为星期的开始

%w

星期(0-6),星期天为星期的开始

%W

一年中的星期数(00-53)星期一为星期的开始

%x

本地相应的日期表示

%X

本地相应的时间表示

%Z

当前时区的名称

获取日期和时间

1. datetime

# 获取当前日期和时间
print(datetime.now())
2017-08-17 14:38:27.417507
print(datetime.now().month)

print(datetime.now().minute)
# 构造指定日期和时间 
dt=datetime(2017,6,25,9,0,1)
print(dt)
2017-06-25 09:00:01 # datetime本身有日期时间格式的容错
dt=datetime(2017,6,25,25,00)
ValueError: hour must be in 0..23

2. calendar

# 获取某个月的日历
import calendar
print(calendar.month(2017,8))
August 2017
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

datetime <—> timestamp

# datetime——>timestamp: datetime.timestamp()
dt=datetime(2017,6,25,9,0,1)
print(dt.timestamp())
1498395601.0 # timestamp()——>datetime: datetime.fromtimestamp(t)
t=1498395601.0
print(datetime.fromtimestamp(t)) #本地时间2017-06-25 09:00:01
print(datetime.utcfromtimestamp(t)) #UTC时间2017-06-25 13:00:01

str<——>datetime:strptime(str,格式化字符串)

# str——>datetime:strptime(str,格式化字符串)
text="2017-06-25 12:01:02"
cdate=datetime.strptime(text,'%Y-%m-%d %H:%M:%S')
print(cdate,type(cdate))
2017-06-25 12:01:02 <class 'datetime.datetime'>
0:00:00.001838 //执行时间 # 实际上由于strptime()的性能较差,我们可以自定义一个类似下面这样的函数来实现str—>datetime
def parse_dt(*args):
if len(args)==1:
y,mo,r=args[0].split('-')
return datetime(int(y),int(mo),int(r))
else:
y,mo,r=args[0].split('-')
h,mi,s=args[1].split(':')
return datetime(int(y),int(mo),int(r),int(h),int(mi),int(s)) dt=parse_dt('2017-6-25','12:01:02')
print(dt,type(dt))
2017-06-25 12:01:02 <class 'datetime.datetime'>
0:00:00.000019 //执行时间
# datetime——>str:strftime(datetime,格式化字符串)
dt=datetime(2017,6,25,9,0,1)
cdate=datetime.strftime(dt,'%A %B %d,%Y') //根据python格式化格式来输出想要的结果即可
print(cdate)
Sunday June 25,2017

时间计算/判断

1. 计算时间间隔

d1=parse_dt('2017-8-21','14:00:00')
d2=parse_dt('2017-8-21','18:30:00') #计算时间差
print(type(d2-d1))
#<class 'datetime.timedelta'> print((d2-d1))
#4:30:00 print((d2-d1).days)
#0 print((d2-d1).seconds)
#16200
# datetime加减:时间往后或往前计算
dt=datetime.now()
print(dt)
#2017-08-21 09:43:47.183234 print(dt+timedelta(hours=1))
#2017-08-21 10:43:47.183234 print(dt-timedelta(hours=1))
#2017-08-21 08:43:47.183234 print(dt-timedelta(days=1,hours=1))
#2017-08-20 08:43:47.183234

2. 判断某天是周几

#判断某天是周几
def gz_weekday(year,month,day):
x=calendar.weekday(year,month,day)
if x==0:
print("星期一")
if x==1:
print("星期二")
if x==2:
print("星期三")
if x==3:
print("星期四")
if x==4:
print("星期五")
if x==5:
print("星期六")
if x==6:
print("星期日")
gz_weekday(2017,8,17)
星期四

3. 判断闰年

#判断是否为闰年
print(calendar.isleap(2020))
#True
print(calendar.isleap(2017))
#False
print(calendar.leapdays(2000,2020))
#5

4. 计算上一个周五/下一个周五

#计算上一个星期五/下一个星期五
from dateutil.relativedelta import relativedelta
from dateutil.rrule import * dt=datetime.now()
print(dt)
#2017-08-21 11:21:40.470703 print(dt+relativedelta(weekday=FR)) #其他Mo、等都同理
#2017-08-25 11:21:40.470703 print(dt+relativedelta(weekday=FR(-1)))
#2017-08-18 11:21:40.470703

5. 计算某个月有几天

#计算某个月有几天
import calendar
# monthrange(year, month)
# Return weekday (0-6 ~ Mon-Sun) and number of days (28-31) for year, month.
print(calendar.monthrange(2018,2))
#(3, 28) print(calendar.monthrange(2017,10))
#(6, 31)

补充:calender模块常见函数

序号

函数及描述

1

calendar.calendar(year,w=2,l=1,c=6)

返回一个多行字符串格式的year年年历,3个月一行,间隔距离为c。 每日宽度间隔为w字符。每行长度为21* W+18+2* C。l是每星期行数。

2

calendar.firstweekday( )

返回当前每周起始日期的设置。默认情况下,首次载入caendar模块时返回0,即星期一。

3

calendar.isleap(year)

是闰年返回True,否则为false。

4

calendar.leapdays(y1,y2)

返回在Y1,Y2两年之间的闰年总数。

5

calendar.month(year,month,w=2,l=1)

返回一个多行字符串格式的year年month月日历,两行标题,一周一行。每日宽度间隔为w字符。每行的长度为7* w+6。l是每星期的行数。

6

calendar.monthcalendar(year,month)

返回一个整数的单层嵌套列表。每个子列表装载代表一个星期的整数。Year年month月外的日期都设为0;范围内的日子都由该月第几日表示,从1开始。

7

calendar.monthrange(year,month)

返回两个整数。第一个是该月的星期几的日期码,第二个是该月的日期码。日从0(星期一)到6(星期日);月从1到12。

8

calendar.prcal(year,w=2,l=1,c=6)

相当于 print calendar.calendar(year,w,l,c).

9

calendar.prmonth(year,month,w=2,l=1)

相当于 print calendar.calendar(year,w,l,c)。

10

calendar.setfirstweekday(weekday)

设置每周的起始日期码。0(星期一)到6(星期日)。

11

calendar.timegm(tupletime)

和time.gmtime相反:接受一个时间元组形式,返回该时刻的时间辍(1970纪元后经过的浮点秒数)。

12

calendar.weekday(year,month,day)

返回给定日期的日期码。0(星期一)到6(星期日)。月份为 1(一月) 到 12(12月)。

[PY3]——时间处理——datetime | calendar的更多相关文章

  1. Python学习总结15:时间模块datetime & time & calendar (二)

    二 .datetime模块  1. datetime中常量 1)datetime.MINYEAR,表示datetime所能表示的最小年份,MINYEAR = 1. 2)datetime.MAXYEAR ...

  2. python 时间模块(time ,datetime,calendar)

    Python中提供了时间相关的内置模块,我们主要用的是:time模块.datetime模块和calendar模块 ⽇期格式化的标准: %y 两位数的年份表示(00-99) %Y 四位数的年份表示(00 ...

  3. python3笔记二十一:时间操作datetime和calendar

    一:学习内容 datetime calendar 二:datetime 1.模块说明:可以理解为datetime基于time进行了封装,提供了各种使用的函数,datetime模块的接口更直接,更容易调 ...

  4. 【转载】Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码

    本文转载自脚本之家,源网址为:https://www.jb51.net/article/147429.htm 一.Python中日期时间模块datetime介绍 (一).datetime模块中包含如下 ...

  5. day18 时间:time:,日历:calendar,可以运算的时间:datatime,系统:sys, 操作系统:os,系统路径操作:os.path,跨文件夹移动文件,递归删除的思路,递归遍历打印目标路径中所有的txt文件,项目开发周期

    复习 ''' 1.跨文件夹导包 - 不用考虑包的情况下直接导入文件夹(包)下的具体模块 2.__name__: py自执行 '__main__' | py被导入执行 '模块名' 3.包:一系列模块的集 ...

  6. ahjesus在asp.net中还可以通过设置HttpCookie对象的过期时间为DateTime.MinValue来指定此Cookies为跟随浏览器生效

    ahjesus在asp.net中还可以通过设置HttpCookie对象的过期时间为DateTime.MinValue来指定此Cookies为跟随浏览器生效

  7. 带毫秒的字符转换成时间(DateTime)格式的通用方法

    C#自身有更好的方式,Net任意String格式转换为DateTime类型 ====================================================== 原文 ==== ...

  8. 2016年11月3日JS脚本简介数据类型: 1.整型:int 2.小数类型: float(单精度) double(双精度) decimal () 3.字符类型: chr 4.字符串类型:sting 5.日期时间:datetime 6.布尔型数据:bool 7.对象类型:object 8.二进制:binary 语言类型: 1.强类型语言:c++ c c# java 2.弱类型语

    数据类型: 1.整型:int 2.小数类型: float(单精度) double(双精度) decimal () 3.字符类型: chr 4.字符串类型:sting 5.日期时间:datetime 6 ...

  9. 【Python】随机模块random & 日期时间のtime&&datetime

    ■ random 顾名思义,random提供了python中关于模拟随机的一些方法.这些方法都一看就懂的,不多说了: random.random() 返回0<n<=1的随机实数 rando ...

随机推荐

  1. [Erlang24]使用zotonic搭建网站记录

    zotonic的搭建网站(blog)记录:   zotonic:用Erlang做的一个web 框架:   和wordpress 类似,但是官网称比PHP CMS要快10倍以上   先看看我的成果:正弦 ...

  2. C# SQLite 数据库

    数据库 Oracle.Oracle的应用,主要在传统行业的数据化业务中,比如:银行.金融这样的对可用性.健壮性.安全性.实时性要求极高的业务 MS SQL Server.windows生态系统的产品, ...

  3. 纸壳CMS列表Grid的配置

    纸壳CMS(ZKEACMS)里的Grid是一个TagHelper,是对jQuery插件datatables的一个配置封装. Easy.Mvc.TagHelpers.GridTagHelper grid ...

  4. HBase原理–所有Region切分的细节都在这里了

    本文由  网易云发布.   作者:范欣欣(本篇文章仅限内部分享,如需转载,请联系网易获取授权.)   Region自动切分是HBase能够拥有良好扩张性的最重要因素之一,也必然是所有分布式系统追求无限 ...

  5. SoundPool

    如果应用程序经常播放密集.急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了.因为MediaPlayer存在如下缺点: 1) 延时时间较长,且资源占用率高. 2) 不支持 ...

  6. Stacking方法详解

    集成学习方法主要分成三种:bagging,boosting 和 Stacking.这里主要介绍Stacking. stacking严格来说并不是一种算法,而是精美而又复杂的,对模型集成的一种策略. 首 ...

  7. “全栈2019”Java第九十四章:局部内部类详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. CF1109DSasha and Interesting Fact from Graph Theory(数数)

    题面 传送门 前置芝士 Prufer codes与Generalized Cayley's Formula 题解 不行了脑子已经咕咕了连这么简单的数数题都不会了-- 首先这两个特殊点到底是啥并没有影响 ...

  9. P03-Python装饰器

    本文总结自oldboy python教学视频. 一.前言 1.装饰器本质上就是函数,功能是装饰其他函数,为其他函数添加附加功能. 装饰器在装饰函数时必须遵循3个重要的原则: (1)不能修改被装饰的函数 ...

  10. Linux安装 jdk、tomcat、eclipse、mysql

    概述如果需要在Linux下进行JavaEE的开发,我们需要安装如下软件: 安装JDK 安装步骤 0) 先将软件通过xftp5 上传到/opt 下 1) 解压缩到/opt tar -zxvf  jdk. ...