time今天刚结束,趁热打铁,把datetime也干掉算了。看了一般调试电脑去了,现在回来了。
前面学的date感觉更多的是面向过程的,里面用的很多函数。
那datetime更加像一个面向对象的操作。
网上查了点资料,书上看了一些,准备挑一些自己认为的重点讲一下算了。
先说一下datetime.datetime好了,以前我就一直会用datetime.datetime.now()
当运行一个d1=datetime.datetime.now()或者d1=datetime.datetime.(2019,1,1)
其实本质是在完成实例化,所以,该对象d1会又很多定义的方法,属性。
由于是对实例的操作,不同的实例之间还能进行一些加减操作,返回datetime.timedelta对象。
In [244]: d1 = datetime.datetime(1985,11,5) In [245]: d2 = datetime.datetime.now() In [246]: isinstance(d1,datetime.datetime) Out[246]: True In [247]: d1-d2 Out[247]: datetime.timedelta(days=-12425, seconds=74030, microseconds=689037) In [248]: d1.isoweekday Out[248]: <function datetime.isoweekday> In [249]: d1.isoweekday() Out[249]: 2
In [251]: datetime.datetime.fromtimestamp(time.time())
Out[251]: datetime.datetime(2019, 11, 11, 3, 35, 10, 555170)
In [252]: datetime.datetime.now()
Out[252]: datetime.datetime(2019, 11, 11, 3, 35, 18, 959855)
datetime.datetime.fromtimestamp(time.time()) 还可以用时间戳来创建一个时间对象。
这里简单的做了一个代码说明,对象又很多属性。(我感觉可能比较使用的准备标注红色)
datetime 实例方法:
datetime.date()
- 返回一个 date 对象datetime.time() - 返回一个 time 对象(tzinfo 属性为 None)
datetime.timetz()
- 返回一个 time() 对象(带有 tzinfo 属性)
datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])
- 生成一个新的日期对象,用参数指定日期和时间代替原有对象中的属性
datetime.astimezone(tz=None)
- 传入一个新的 tzinfo 属性,返回根据新时区调整好的 datetime 对象
datetime.utcoffset()
- 如果 tzinfo 属性是 None,则返回 None;否则返回 self.tzinfo.utcoffset(self)
datetime.dst()
- 如果 tzinfo 属性是 None,则返回 None;否则返回 self.tzinfo.dst(self)
datetime.tzname()
- 如果 tzinfo 属性是 None,则返回 None;否则返回 self.tzinfo.tzname(self)
datetime.timetuple()
- 返回日期对应的 time.struct_time 对象(类似于 time 模块的 time.localtime())
datetime.utctimetuple()
- 返回 UTC 日期对应的 time.struct_time 对象
datetime.toordinal()
- 返回日期对应的 Gregorian Calendar 日期(类似于 self.date().toordinal())
datetime.timestamp()
- 返回当前时间的时间戳(类似于 time 模块的 time.time())
datetime.weekday()
- 返回 0 ~ 6 表示星期几(星期一是 0,依此类推)
datetime.isoweekday()
- 返回 1 ~ 7 表示星期几(星期一是1, 依此类推)
datetime.isocalendar()
返回一个三元组格式 (year, week, day) # 第二个元素是“year中的第几周”,第三个元素是“该周的第几天”
datetime.isoformat(sep=‘T‘)
- 返回一个 ISO 8601 格式的日期字符串,如 "YYYY-MM-DD" 的字符串
datetime.__str__()
- 对于 date 对象 d 来说,str(d) 相当于 d.isoformat()
datetime.ctime()
- 返回一个表示日期的字符串,相当于 time 模块的 time.ctime(time.mktime(d.timetuple()))
datetime.strftime(format)
- 返回自定义格式化字符串表示日期,下面有详解
datetime.__format__(format)
- 跟 datetime.strftime(format) 一样,这使得调用 str.format() 时可以指定 data 对象的字符串
其实看的过程中,我觉的最方便的还是datetime.timedelta,这个能非常方便的让你找到前一天或者后一天的日期。
In [254]: d2 Out[254]: datetime.datetime(2019, 11, 11, 3, 26, 9, 310963) In [255]: t_pass = datetime.timedelta(2) In [256]: d2+t_pass Out[256]: datetime.datetime(2019, 11, 13, 3, 26, 9, 310963) In [257]: d2 -t_pass Out[257]: datetime.datetime(2019, 11, 9, 3, 26, 9, 310963)
一个 datetime.timedelta 类,你需要将指定的时间段传递给类的构造函数。可选参数包含:weeks,days (默认), hours, minutes, seconds, microseconds
最后讲一下strftime方法,里面的参数跟time.strftime函数里面的差不多。
格式化指令 | 含义 |
%a | 星期的简写(星期一 ~ 天:Mon, Tue, Wed, Thu, Fri, Sat, Sun) |
%A | 星期的全写(星期一 ~ 天:Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday) |
%w | 在一个星期中的第几天( 0 表示星期天 ... 6 表示星期六) |
%d | 在一个月中的第几天(01, 02, ..., 31) |
%b | 月份的简写(一月 ~ 十二月:Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec) |
%B | 月份的全写(一月 ~ 十二月:January, February, March, April, May, June, July, August, September, October, November, December) |
%m | 月份(01, 02, ..., 12) |
%y | 用两个数字表示年份(例如 2014年 == 14) |
%Y | 用四个数字表示年份 |
%H | 二十四小时制(00, 01, ..., 23) |
%I | 十二小时制(01, 02, ..., 11) |
%p | AM 或者 PM |
%M | 分钟(00, 01, ..., 59) |
%S | 秒(00, 01, ..., 59) |
%f | 微秒(000000, 000001, ..., 999999) |
%z | 与 UTC 时间的间隔 ;如果是本地时间,返回空字符串((empty), +0000, -0400, +1030) |
%Z | 时区名称;如果是本地时间,返回空字符串((empty), UTC, EST, CST) |
%j | 在一年中的第几天(001, 002, ..., 366) |
%U | 在一年中的第几周,星期天作为第一天(00, 01, ..., 53) |
%W | 在一年中的第几周,星期一作为第一天(00, 01, ..., 53) |
%c | 用字符串表示日期和时间(Tue Aug 16 21:30:00 2014) |
%x | 用字符串表示日期(08/16/14) |
%X | 用字符串表示时间(21:30:00) |
%% | 表示百分号 |
可以再对象后面根据需要填写参数。
In [258]: d2 Out[258]: datetime.datetime(2019, 11, 11, 3, 26, 9, 310963) In [259]: d2.strftime(‘%Y-%m-%d:%H.%M.%s‘) Out[259]: ‘2019-11-11:03.26.1573413969‘ In [260]: d2.strftime(‘%Y-%m-%d:%H.%M.%S‘) Out[260]: ‘2019-11-11:03.26.09‘ In [261]: d2.strftime(‘%A %Y-%m-%d:%H.%M.%S‘) Out[261]: ‘Monday 2019-11-11:03.26.09‘
datetime的模块就重点这里讲一些,后面三个参考链接。有需要用的到,可以参考下。
https://fishc.com.cn/forum.php?mod=viewthread&tid=51725&extra=&highlight=datetime&page=1
https://www.cnblogs.com/awakenedy/articles/9182036.html
https://blog.csdn.net/weixin_42232219/article/details/89838580
原文:https://www.cnblogs.com/sidianok/p/11832621.html