文章目录

  • 1、简述
  • 2、datetime
  • 2.1 当前时间
  • 2.2 获取指定日期和时间
  • 2.3 UTC时间
  • 2.4 时间戳
  • 2.5 获取单独天等信息实例方法
  • 2.5.1 可以单独获取日期或时间
  • 2.5.2 获取年份、月份等属性
  • 2.6 更改某一属性值
  • 3、timedelta实现日期时间的加减
  • 4、字符串与时间之间转换
  • 4.1 str转换为datetime:strptime
  • 4.2 datetime转换为str:strftime
  • 5、其他


1、简述

datetime是Python处理日期和时间的标准库。

最近在搞时间字符串,很是头疼,搜了搜datetime的,感觉总结的不太实用,干脆我自己按照管饭手册和现在使用的一些经验总结了,喜欢的小伙伴记得关注收藏。

官方文档:https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior

2、datetime

注意到datetime是模块,datetime模块还包含一个datetime类,通过from datetime import datetime导入的才是datetime这个类。
如果仅导入import datetime,则必须引用全名datetime.datetime。

2.1 当前时间

datetime.now()返回当前日期和时间,其类型是datetime。

from datetime import datetime
now = datetime.now()
print(now)
print(type(now))

结果:

2020-05-19 10:41:07.513300
<class 'datetime.datetime'>

2.2 获取指定日期和时间

函数:

datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)

例子

dt1 = datetime(2020, 4, 19, 12 ,25 ,32) # 用指定日期时间创建datetime
dt2 = datetime(2020,5,7)
print(dt1,dt2)

结果:

2020-04-19 12:25:32 2020-05-07 00:00:00

后边不填的话,自动补零

2.3 UTC时间

整个地球分为二十四时区,每个时区都有自己的本地时间。在国际无线电通信中,为统一而普遍使用一个标准时间,称为通用协调时(UTC,
Universal Time Coordinated)。UTC与格林尼治平均时(GMT, Greenwich Mean
Time)一样,都与英国伦敦的本地时相同。UTC与GMT含义完全相同。

datetime.utcnow()

now = datetime.now()
now_str = now.strftime("%Y/%m/%d %H:%M:%S")
now_utc = datetime.utcnow()

print(now,'\r\n',now_utc)

结果:

2020-05-19 11:02:55.545860 
2020-05-19 03:02:55.545860

2.4 时间戳

如果时间戳是由平台的C支持的值的范围从gmtime()功能,并OSError在gmtime()故障。通常将其限制在1970年到2038年之间。
要获取感知datetime对象,请使用fromtimestamp():

具体来说,此函数支持以下格式的字符串:
YYYY-MM-DD[*HH[:MM[:SS[.fff[fff]]]][+HH:MM[:SS[.ffffff]]]]

举例:

from datetime import datetime
datetime.fromisoformat('2011-11-04')

datetime.fromisoformat('2011-11-04T00:05:23')

datetime.fromisoformat('2011-11-04 00:05:23.283')

datetime.fromisoformat('2011-11-04 00:05:23.283+00:00')

datetime.fromisoformat('2011-11-04T00:05:23+04:00')

2.5 获取单独天等信息实例方法

2.5.1 可以单独获取日期或时间

也可返回星期datetime.weekday(),以整数形式返回星期几,其中星期一为0,星期日为6

now = datetime.now()
print(now.date())
print(now.time())
print(tom.weekday())
print(type(now.date()))

结果:

2020-05-19
11:11:58.490936
1
<class 'datetime.date'>

2.5.2 获取年份、月份等属性

如果想单独获取当前月份或年份等属性:
year, month, day, hour=0, minute=0, second=0, microsecond=0
这些属性返回的就是int类型,可以直接用于判断

from datetime import datetime,timedelta
now = datetime.now()
delta = timedelta(days=50)
print(now)
print(now.year)
print(now.minute)
print(now.second)
print(type(now.year))
print(now.year == 2020)

结果:

2020-05-19 11:32:14.103423
2020
32
14
<class 'int'>
True

2.6 更改某一属性值

datetime.replace(year = self.year,month = self.month,day = self.day,hour = self.hour,minutes = self.minute,second = self.second,microsecond = self.microsecond,tzinfo = self.tzinfo,* fold = 0 )

now = datetime.now()
tom = now.replace(day=20)
print(now,tom)

结果:

2020-05-19 11:14:30.883869 2020-05-20 11:14:30.883869

3、timedelta实现日期时间的加减

甲timedelta对象表示的持续时间,两个日期或时间之间的差

class datetime.timedelta(days=0, seconds=0, microseconds=0,
milliseconds=0, minutes=0, hours=0, weeks=0)

python指定日期的月份加1_java


我们可以利用timedelta实现日期时间的加减,比如当前时间加50天:

from datetime import datetime,timedelta
now = datetime.now()
delta = timedelta(days=50)
print(now)
print(now+delta)
print(now-delta)

结果:

2020-05-19 11:24:43.753700
2020-07-08 11:24:43.753700
2020-03-30 11:24:43.753700

关于比较:
这里timedelta定义的天数为timedelta对象,和数字5是不一样的,但是如果都是timedelta对象,之间可以比较

>>> from datetime import timedelta
>>> delta1 = timedelta(seconds=57)
>>> delta2 = timedelta(hours=25, seconds=2)
>>> delta2 != delta1
True
>>> delta2 == 5
False

4、字符串与时间之间转换

4.1 str转换为datetime:strptime

很多时候,用户输入的日期和时间是字符串,要处理日期和时间,首先必须把str转换为datetime。转换方法是通过datetime.strptime()实现,需要一个日期和时间的格式化字符串:

字符串’%Y/%m/%d %H:%M:%S’规定了日期和时间部分的格式
注意转换后的datetime是没有时区信息的。

from datetime import datetime
ond_start_time=datetime.strptime("2019/07/31 00:00:00","%Y/%m/%d %H:%M:%S")
print(ond_start_time)
print(type(ond_start_time))

结果:

2019-07-31 00:00:00
<class 'datetime.datetime'>

4.2 datetime转换为str:strftime

与上一小节刚好相反

python指定日期的月份加1_python_02

from datetime import datetime
now = datetime.now()
str_now = now.strftime("%Y/%m/%d %H:%M:%S")
print(str_now)
print(type(str_now))

结果:

2020/05/19 11:44:39
<class 'str'>

5、其他

当然,比如pandas有pd.to_datetime(data,format="%Y/%m/%d %H:%M:%S")之类的函数,也是可以将str批量转为datetime的,这里就不过多介绍了。