Python每日一练0020

原创 2018年04月16日 13:50:32

问题

你需要执行简单的日期操作,计算两个日期间隔多少天、某个日期后的多少天是几月几日、转换时间字符串的格式等

解决方案

使用datetime库中的datetimetimedelta

其中datetime类代表一个日期 + 时间,例如2018年4月16日11点00分00秒;timedelta类代表一个日期间隔

对于datetime实例,可以直接进行-数学运算得到一个timedelta实例,也就是两个日期时间的间隔,比如计算两个日期之间有多少天

>>> import datetime
>>> a = datetime.datetime(year=2018, month=4, day=16)
>>> b = datetime.datetime(year=2018, month=3, day=5)
>>> delta = a - b
>>> delta.days
42
>>> print(delta)
42 days, 0:00:00

所以我们也可以让一个datetime实例加上一个timedelta实例,得到一个新的datetime实例,比如说我想计算从今天开始往后20天是几月几日

>>> start = datetime.datetime.now()
>>> print(start)
2018-04-16 11:12:50.846262
>>> delta = datetime.timedelta(days=20)
>>> end = start + delta
>>> print(end)
2018-05-06 11:12:50.846262

并且datetime类还提供了strftimestrptime进行字符串和日期时间之间的转换操作

我们可以使用strftime将一个datetime实例转换为字符串,也可以用strptime将一个字符串转换为datetime实例,并且自己控制格式

>>> dt = datetime.datetime.now()
>>> s = datetime.datetime.strftime(dt, '%Y-%m-%d %X')
>>> s
'2018-04-16 11:21:01'
>>> dt2 = datetime.datetime.strptime(s, '%Y-%m-%d %X')
>>> dt2
datetime.datetime(2018, 4, 16, 11, 21, 1)

讨论

使用datetimetimedelta可以对日期时间很方便的操作,除了上面介绍的,还比如将一个列表中某个时间段的数据取出来、对数据库中select出来的日期时间进行操作、或者对日期字符串进行重新格式化等等

除了datetimetimedelta类外,datetime模块还支持datetime等类,如果只需要表示日期(X年X月X日),可以只使用date类,如果只需要表示时间(X时X分X秒),可以使用time

关于strftimestrptime的占位符(%Y %m %d这种)见:https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior

关于datetime更详细的文档见:https://docs.python.org/3/library/datetime.html#module-datetime

来源

Segment Fault

关注

欢迎关注我的微信公众号:python每日一练

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangb0asdas1/article/details/79959618

【Python】第二周Python基础(下)

-
  • 1970年01月01日 08:00

Python每日一练--------元组+字典+列表

Python包含6中内建的序列,即列表、元组、字符串、Unicode字符串、buffer对象和xrange对象。 通用序列操作:索引、分片、序列相加、乘法、成员资格、长度、最小值和最大值 ...
  • nameix
  • nameix
  • 2017-01-10 15:10:30
  • 269

Python一日一练100----消息服务器

要求: 创建一个TCP服务器,要求:能接收客户的消息,并在消息前加一个时间戳。 服务器端: # -*- coding: utf-8 -*- ...
  • a359680405
  • a359680405
  • 2015-01-09 14:23:03
  • 1700

[python每日一练]--0000:图片添加数字

'第 0000 题:将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果。'...
  • saya_wj
  • saya_wj
  • 2017-06-16 17:01:57
  • 175

Python每日一练----2.基本数学函数

1.次幂 >>>2**3 8 >>>pow(2,3) #不用导包 82.变量类型判断 >>>x = raw_input() >>>type(x) 3.四舍五入 >>>round(1.0/2.0) 1....
  • nameix
  • nameix
  • 2017-01-09 15:14:25
  • 180

windows api 每日一练(5)基本内存操作

  1.CopyMemory 将一块内存的数据从一个位置复制到另一个位置 http://baike.baidu.com/view/919894.htm?fr=ala0 2.ZeroMemory 用...
  • clingingboy
  • clingingboy
  • 2009-11-20 15:11:00
  • 603

C++每日一练(I/O)

一、今日课题I/O二、实战演练 大多数计算机语言的输入输出的实现都是以语言本身为基础的,但是C/C++没有这样做。C语言最初把I/O留给了编译器实现人员。这样做的一个原因是可以提供足够的自由度,使...
  • lxy_2011
  • lxy_2011
  • 2016-10-14 15:52:48
  • 606

每日一练(python版本)

   编码完成下面的处理函数。函数将字符串中的字符 '*'移到串的前部分,前面的非 '*'字符后移,但不能改变非 '*'字符的先后顺序,函数返回串中字符 '*'的数量。如原始串为: ab**...
  • liu3417
  • liu3417
  • 2011-03-16 06:33:00
  • 339

Python一日一练103----Django模版练习

要求 request.META 是一个Python字典,包含了所有本次HTTP请求的Header信息,比如用户IP地址和用户Agent。通过request.META.items()可得到这个字典。要...
  • a359680405
  • a359680405
  • 2015-01-23 09:58:42
  • 1542

c语言每日一练5

前几天在c++论坛发了好多这个,原来那里是用来给分提问的,哈哈,貌似我没分,还发了那么多帖子,我表示会坑好多人。就开了微博,可恶的微博,要三天后才能发表文章,写这些就只是为了督促自己。开始今天的吧. ...
  • wuwovicky
  • wuwovicky
  • 2012-10-30 16:21:57
  • 584
收藏助手
不良信息举报
您举报文章:Python每日一练0020
举报原因:
原因补充:

(最多只允许输入30个字)