python datetime 模块

 

 

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=时区) 只是修改时区属性,不会修改日期和时间。

 
 
posted @ 2018-01-24 15:13  minger_lcm  阅读(223)  评论(0编辑  收藏  举报