python datetime 模块

python

datetime模块定义了下面这几个类:

    • datetime.date:表示日期的类。常用的属性有year, month, day;

    • datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond;

    • datetime.datetime:表示日期时间。

    • datetime.timedelta:表示时间间隔,即两个时间点之间的长度。
    • datetime.tzinfo:与时区有关的相关信息。

d=datetime.datetime.now() 返回当前的datetime日期类型

d.timestamp(),d.today(), d.year,d.timetuple()等方法可以调用

 

print(datetime.date.today())

# 2021-02-15


timetuple把日期格式转换为元组时间显示

print(datetime.date.timetuple(datetime.date.today()))

# time.struct_time(tm_year=2021, tm_mon=2, tm_mday=15, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=46, tm_isdst=-1)

datetime.date.fromtimestamp(322222) 把一个时间戳转为datetime类型

print(datetime.date.fromtimestamp(322222))

# 1970-01-05


datetime类型 转换时间戳

from datetime import datetime

# datetime格式 ---> 转换为时间戳格式

v1 = datetime.now()

val = v1.timestamp()

print(val)

# 1613475487.190326

 import datetime

datetime.datetime.now()  打印本地当前时间

>>> print(datetime.datetime.now())

2017-12-20 17:30:31.035954

获取当前本地utc时间

print(datetime.datetime.utcnow())

# 2021-02-16 07:16:49.745282


时间戳直接转成日期格式

>>> print(datetime.date.fromtimestamp(time.time()))

2017-12-20

 时间戳转换成 年日月 小时分钟秒时间类型

print(datetime.datetime.fromtimestamp(123123))

# 1970-01-02 18:12:03

把当前时间以指定的日期格式打印出来

>>> print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))

2017-12-20 17:33:44

datetime.timedelta()  时间加减
显示当前时间+3天时间

print(datetime.datetime.now() + datetime.timedelta(days=3))

2017-12-24 10:53:23.549693

显示当前时间 -3天时间

print(datetime.datetime.now() + datetime.timedelta(days=-3))

2017-12-18 10:53:23.549693

当前时间+3小时

print(datetime.datetime.now() + datetime.timedelta(hours=3))

2017-12-21 13:53:23.549693

当前时间+30分钟

print(datetime.datetime.now() + datetime.timedelta(minutes=30))

2017-12-21 11:23:23.549693

datetime类型 加上 timedelta 类型  可以进行加减

  # 时间的加减

v2 = v1 + timedelta(days=140, minutes=5)

print(v2)

# datetime类型 + timedelta类型

datetime 支持两个 datetime 之间进行相减 获取他们之间的时间间隔

时间间隔获取什么维度都可以 支持三种 

from datetime import datetime, timezone, timedelta

v1 = datetime.now()

print(v1)

# 2021-02-16 19:12:37.251638

v2 = datetime.utcnow() # 当前UTC时间

print(v2)

# 2021-02-16 11:12:37.251638

# datetime之间相减,计算间隔时间(不能相加)

data = v1 - v2

print(data.days) # 0

print(data.seconds / 60 / 60) # 8

print(data.microseconds) # 0

1. data.days 以天为维度  他们之间相差多少天

2. data.seconds 以秒 为间隔单位

3.data.microseconds 以毫秒 为单位

时间 datetime 和datetime 之间不允许相加

只支持 datetime类型 - datetime类型

支持 datetime类型 比较 datetime类型

先做时间转换,再时间加减

import datetime

time = datetime.datetime.strptime("2021-02-11T07:59:28",'%Y-%m-%dT%H:%M:%S')

print(time )

print(datetime.timedelta(hours=8))

time = time + datetime.timedelta(hours=8)

print(time)

'''

2021-02-11 07:59:28

8:00:00

2021-02-11 15:59:28

'''

2021-02-11 07:59:28+ 8:00:00 加8小时

那就是等于 2021-02-11 15:59:28

自定义时间

c_time = (datetime.datetime.now())

print(c_time.replace(year=2016,month=3,day=5,hour=5,minute=5,second=40))

2016-03-05 05:05:40.549693

时间替换

 

# 时间替换

# 跳跃到2015年

print(datetime.datetime.now().replace(year=2015))

# 2015-02-15 23:47:57.637232

print(datetime.datetime.now().replace(year=2015, month=10, hour=1, minute=1))

# 2015-10-15 01:01:28.160332

字符串格式时间转换 datatime格式时间

datetime.strptme("字符串格式时间","datetime时间格式指定的格式")  %Y 年,%m,月份,%d,天

from datetime import datetime

# 字符串格式的时间 ---> 转换为datetime格式时间

text = "2021-11-11"

v1 = datetime.strptime(text, '%Y-%m-%d') # %Y 年,%m,月份,%d,天。

print(v1)

# 2021-11-11 00:00:00

datetime时间格式 转换 字符串格式

strftime("时间格式化规则") 

 %Y-%m-%d %H:%M:%S

年    月 日    小时 分钟  秒

from datetime import datetime

# datetime格式 ----> 转换为字符串格式

v1 = datetime.now()

val = v1.strftime("%Y-%m-%d %H:%M:%S")

print(val)

# 2021-02-16 19:32:09

获取某个指定时区时间

import datetime

# 定义时区 东8区时间

tz = datetime.timezone(datetime.timedelta(hours=8))

v2 = datetime.datetime.now(tz=tz)

print(v2)

当涉及国际时区时,时区转换则会经常使用到,比如来尝试将刚才的UTC时间转换为本地时间。对于Python3.3+版本,可以这么做:

import datetime

utc_now = datetime.datetime.utcnow()

print(utc_now)

# 2021-02-16 13:30:16.291588

utc_now1 = utc_now.replace(tzinfo=datetime.timezone.utc)

print(utc_now1)

# 2021-02-16 13:30:16.291588+00:00

china_now = utc_now1.astimezone(tz=None)

print(china_now)

# 2021-02-16 21:30:16.291588+08:00 转换东八区时间



import datetime

# 另外一种

utc_dt = datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc)

print("utc", utc_dt)

cn_dt = utc_dt.astimezone(datetime.timezone(datetime.timedelta(hours=8)))

print("cn", cn_dt)

'''

utc 2021-02-16 13:47:44.793999+00:00

cn 2021-02-16 21:47:44.793999+08:00

'''

实际上只要datetime的对象存在,就可以使用astimezone的方法转换到任何一个时区



设置时区 需要导入pytz模块
生成时区

pytz.timezone("Asia/shanghai")

时间设置指定的时区

import datetime

import pytz

# 设置时区

# 默认tz=None 默认没有时区 可以设置时区

print(datetime.datetime.now(tz=pytz.timezone("Asia/shanghai")))

# 2021-02-16 01:20:24.010195+08:00

import pytz

....

#dt the datetime var

dt.replace(tzinfo=pytz.utc).astimezone(pytz.timezone('Asia/Shanghai'))

特别是在转换其他时区的时候。而对于更低版本的Python,则datetime.timezone可能压根就还没有。
因此更便捷的方法是借助 pyzt,下面就借助于它来实现时区转换:

from pytz import timezone

import datetime

utc_now = datetime.datetime.utcnow()

tzchina = timezone('Asia/shanghai')

utc = timezone('UTC')

local_time = utc_now.replace(tzinfo=utc).astimezone(tzchina)

print(local_time)

# 2021-02-16 21:34:48.097325+08:00

from pytz import timezone

import datetime

def datetime_as_timezone(date_time, time_zone):

tz = timezone(time_zone)

utc = timezone('UTC')

return date_time.replace(tzinfo=utc).astimezone(tz)

def datetime_to_str(date_time):

date_time_tzone = datetime_as_timezone(date_time, 'Asia/Shanghai')

return '{0:%Y-%m-%d %H:%M}'.format(date_time_tzone)

print(datetime_to_str(datetime.datetime.utcnow()))

# 2021-02-16 21:38

 

datetime 获取当前的本地日期和UTC日期:

# 从 datetime 中导入 datetime 模块。

from datetime import datetime

utc_time = datetime.utcnow() # utcnow()获取世界标准时间。

print(f'1、UTC时间为:{utc_time}')

# 1、UTC时间为:2021-02-16 14:28:29.182597

local_time = datetime.now() # now() 获取本地时间。

print(f'1、本地时间为:{local_time}')

# 1、本地时间为:2021-02-16 22:28:29.182597

可以看出本地时间多于UTC世界标准时间8小时。




先把 utc_time 利用 replace(tzinfo=时区对象) 强制更改 时区属性:

from datetime import datetime, timezone, timedelta

utc = timezone.utc

print(f'4、世界标准时区为:{utc}')

# 4、世界标准时区为:UTC

beijing = timezone(timedelta(hours=8))

print(f'1、北京时区为:{beijing}')

# 1、北京时区为:UTC+08:00

utc_time = datetime.utcnow() # 获取当前 UTC 时间

print(f'UTC时间为:{utc_time}')

# UTC时间为:2021-02-16 14:19:00.790664

local_time = datetime.now() # 获取当前本地时间

print(f'本地时间为:{local_time}')

# 本地时间为:2021-02-16 22:19:00.790664

utc = timezone.utc # 获取 UTC 的时区对象

utc_time = datetime.utcnow().replace(tzinfo=utc) # 强制转换加上 UTC 时区。此处敲黑板,需要特别注意。

# replace的tzinfo参数为时区对象,所以

# 也可以这样 replace(tzinfo=timezone(timedelta(hours=0))

print(f'1、强制更改后的UTC时间为:{utc_time}')

# 1、强制更改后的UTC时间为:2021-02-16 14:19:00.790664+00:00

time_beijing = utc_time.astimezone(beijing)

print('2、更改时区为北京后的时间:', time_beijing)

# 2、更改时区为北京后的时间: 2021-02-16 22:19:00.790664+08:00

print('3、获取时区信息:', time_beijing.tzinfo)

# 3、获取时区信息: UTC+08:00

注:astimezone()修改 时区 会对应的调整日期和时间。

replace(tzinfo=时区) 只是修改时区属性,不会修改日期和时间。

 

 

以上是 python datetime 模块 的全部内容, 来源链接: utcz.com/z/387353.html

回到顶部