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. jenkins pipeline中执行nohup java -jar ***.jar & 的时候会忽略执行jar之后的命令

    搜索关键词:pipeline中执行nohup时忽略执行& 问题: 在做自动化部署的时候,脚本如下: sh "ssh root@'$target_ip' nohup '$java_ho ...

  2. 在相应目录下新建或读取xml文件

    string path = AppDomain.CurrentDomain.BaseDirectory+"UserContent1.xml"; //判断相应路径下文件是否存在 不存 ...

  3. Hello World 之 CGAL

    CGAL有神秘的面纱,让我不断想看清其真面目.开始吧! 1 Three Points and One Segment 第一个例子是创建3个点和一条线段,并且在其上进行一些操作. 所有的CGAL头文件都 ...

  4. sharepoint 版本信息查看

    #检查版本:# PowerShell script to display SharePoint products from the registry. Param( # decide on wheth ...

  5. 大公司怎么做Android代码混淆的?

    3月17日,网易资深安全工程师钟亚平在安卓巴士全球开发者论坛上做了<安卓APP逆向与保护>的演讲.其中就谈到了关于代码混淆的问题.现摘取部分重点介绍如下:   Java代码是非常容易反编译 ...

  6. 脚本:定时释放 Linux/CentOS 缓存【转载自:杭州山不高】

    定时释放Linux/CentOS缓存的脚本(yl_dropcaches)如下: #!/bin/bash used=`free -m | awk 'NR==2' | awk '{print $3}'` ...

  7. php 递归数据,三维数组转换二维

    public function sortarea($area, $parent_id = 0, $lev = 1){ static $list; foreach($area as $v){ if($v ...

  8. ava Maven项目之Nexus私服搭建和版本管理应用

    目录: Nexus介绍 环境.软件准备 Nexus服务搭建 Java Maven项目版本管理应用 FAQ 1.Nexus介绍 Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维 ...

  9. Jsp入门实战上

    前面讲了servlet入门实践现在开始介绍jsp入门实践,开发环境的搭建请参考我前面的tomcat的文章,jsp入门教程分为上下两部分,第一部分简单讲解:jsp语法的规范,以及三大编译指令,七个动作指 ...

  10. php 逐行读取文本文件

    在读取文本时,我们要注意一个事情,那就是换行符,应为我们在写文档时会手动换行,这个换行符需不需要保存就要看自己的需求了. 这里封装了两个方法,一个保留换行,一个不保留.$path为文件路径+文件名 1 ...