модуль datetime для временных рядов Python

Python pandas
модуль datetime для временных рядов Python

Общественный номер: You Er Hut
Автор: Питер
Редактор: Питер

Всем привет, меня зовут Питер~

В последней статье о временных рядах Python Питер представил их подробно.модуль времени, в этой статье основное внимание уделяется модулю datetime.

Можно сказать, что этот модуль является обновленной версией модуля времени.Использование является более распространенным и распространенным, а использование более всеобъемлющим. В статье будут использованы различные примеры для объяснения использования этого модуля.

болтовня

Самый последнийюристЯ добавил Питера через официальный аккаунт.Он изучал Python в свободное время.Неужели это общество такое запутанное?

Друзья, чтобы выучить Python, лучше всего следовать за You Er Hut, чтобы выучить его~

содержание

Ссылки на каталоги для этой статьи:

Статьи о пандах

Статьи, связанные с Pandas, обновлены до 26-го числа, и в последнее время основное внимание уделяется тому, как работать с Python или Pandas.последовательносвязанные данные.

Предыдущая статья: Объяснение модуля времени, пожалуйста, обратитесь к:

модуль даты и времени

основной класс

Основные классы, включенные в модуль datetime:

  • Дата: Дата объекта, Обычно используемые атрибуты - это год, месяц, день и т. Д.
  • time: объект времени, основные атрибуты: час, минута, секунда, микросекунда
  • datetime: объект datetime, комбинация атрибута date и атрибута datetime
  • datetime_CAPI: интерфейс языка C для объектов даты
  • timedelta: временной интервал между двумя значениями времени
  • tzinfo: абстрактный базовый класс для информационных объектов часового пояса

постоянный

В основном есть две константы:

  1. MAXYEAR: возвращает максимальный год, который может быть представлен, datetime.MAXYEAR.
  2. MINYEAR: возвращает наименьший год, который может быть представлен, datetime.MINYEAR.

5 категорий

Ниже описывается конкретное использование пяти категорий в модуле datetime:

  • date
  • time
  • datetime
  • timedelta
  • tzinfo

Мы должны сначала импортировать модуль, прежде чем сможем его использовать.

from datetime import *   # *表示模块下面的所有类

класс свиданий

Объект даты состоит из трех частей: год, месяц и день:

Текущее время

# 方式1

from datetime import date

datetime.today().date()
datetime.date(2021, 10, 20)
# 方式2

from datetime import date

# today是一个日期对象,返回的是当前日期
today = date.today()
today  
datetime.date(2021, 10, 20)

Доступ по году, месяцу, дню 3 дескриптора атрибута:

print("今年:",today.year)   # 返回today对象的年份
print("本月:",today.month)  # 返回today对象的月份
print("今日:",today.day)   # 返回today对象的日
今年: 2021
本月: 10
今日: 20

Приведенные выше значения получаются с помощью метода __getattribute__(...):

today.__getattribute__("year")
2021
today.__getattribute__("month")
10
today.__getattribute__("day")
20

Кроме того, мы также можем получить доступ к другой информации о классе даты:

print("当前日期:",today)  # 当前日期
print("当前日期(字符串形式):",today.ctime())   # 返回日期的字符串
print("时间(元组形式):",today.timetuple())   # 当前日期的时间元组信息
当前日期: 2021-10-20
当前日期(字符串形式): Wed Oct 20 00:00:00 2021
时间(元组形式): time.struct_time(tm_year=2021, tm_mon=10, tm_mday=20, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=293, tm_isdst=-1)
print("本星期:",today.weekday())  # 0代表星期一,类推
print("公历序数:",today.toordinal())  # 返回公历日期的序数
print("年/周数/星期:",today.isocalendar())   # 返回一个元组:一年中的第几周,星期几
本星期: 2
公历序数: 738083
年/周数/星期: (2021, 42, 3)

пользовательское время

Укажите произвольное время:

# 自定义一个时间

new_date = date(2021,12,8)  
new_date
datetime.date(2021, 12, 8)
# 返回不同的属性

print("year: ", new_date.year)
print("month: ", new_date.month)
print("day: ", new_date.day)
year:  2021
month:  12
day:  8
# 返回时间元组
new_date.timetuple()
time.struct_time(tm_year=2021, tm_mon=12, tm_mday=8, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=342, tm_isdst=-1)
# 返回公历序数

new_date.toordinal()
738132
# 返回星期,0代表星期1,1代表星期2

new_date.weekday()
2
# 返回星期,1代表星期1,2代表星期2

new_date.isoweekday()
3
# 返回元组:(年份,第几周,周几)

new_date.isocalendar()
(2021, 49, 3)
# 以ISO 8601格式‘YYYY-MM-DD’返回date的字符串形式

new_date.isoformat()
'2021-12-08'
# 返回日期的字符串

new_date.ctime()
'Wed Dec  8 00:00:00 2021'

Укажите другой формат вывода даты:

# 返回指定格式的日期字符串

new_date.strftime("%Y-%m-%d")
'2021-12-08'
new_date.strftime("%Y/%m/%d")
'2021/12/08'
new_date.strftime("%Y年%m月%d日")
'2021年12月08日'
# 替换时间,比如我们替换new_date

r_date = new_date.replace(2021,11,10)
r_date
datetime.date(2021, 11, 10)

В этом случае мы генерируем новый объект даты, конечно, мы также можем указать параметры явно:

new_date.replace(year=2021,month=11,day=11)
datetime.date(2021, 11, 11)

Григорианская порядковая корреляция

Григорианский порядковый номер связан с порядковым методом.

# 查看当前日期的公历序数

to_timestamp = today.toordinal()
to_timestamp
738083

Преобразование данного порядкового номера по григорианскому календарю в определенное время и дату: fromordinal

print(date.fromordinal(to_timestamp))
2021-10-20

Преобразование метки времени

Преобразование через функцию fromtimestamp

import time
t = time.time()  # 当前时间的时间戳
t
1634732660.382036
print(date.fromtimestamp(t))  # 时间戳--->日期
2021-10-20

Преобразование произвольных временных меток:

date.fromtimestamp(1698382719)
datetime.date(2023, 10, 27)

форматирование времени

# 下面我们对today对象进行格式化输出

today
datetime.date(2021, 10, 20)
print(today.strftime("%Y/%m/%d"))
2021/10/20
print(today.strftime("%Y-%m-%d"))
2021-10-20

класс времени

создать объект

Сначала создайте произвольное время

from datetime import time

t = time(20,30,40,1000)

Доступ к общим свойствам

Часы, минуты и секунды являются общими атрибутами

print(t.hour)  # 时
print(t.minute) # 分
print(t.second)  # 秒
print(t.microsecond)  # 微秒
20
30
40
1000

форматированный вывод

# 返回 ISO 8601格式的时间字符串

t.isoformat()
'20:30:40.001000'
# 指定输出的格式

t.strftime("%H:%M:%S:%f")
'20:30:40:001000'

Точно так же есть и функция замены:

# 隐式替换
t.replace(14,37,8)
datetime.time(14, 37, 8, 1000)
# 显式替换

t.replace(hour=4,minute=18,second=19)
datetime.time(4, 18, 19, 1000)

класс даты и времени

Объект datetime содержит всю информацию объекта даты и объекта времени. Сводка методов и свойств, специфичных для datetime:

  • date(...): возвращает часть даты объекта datetime.
  • time(...): возвращает временную часть объекта datetime.
  • utctimetuple(...): возвращает часть кортежа времени UTC.

генерировать текущую дату

from datetime import datetime 

k = datetime.today()  # 当前具体时间
print(k)
2021-10-20 20:24:23.053493

Доступ к различной атрибутивной информации для текущего времени:

print("year:",k.year)
print("month:",k.month)
print("day:",k.day)
year: 2021
month: 10
day: 20

генерировать текущее время

# 返回当前的具体时间

n = datetime.now()
n
datetime.datetime(2021, 10, 20, 20, 24, 23, 694127)
# 返回datetime对象的日期部分

n.date()
datetime.date(2021, 10, 20)
# 返回datetime对象的时间部分

n.time()
datetime.time(20, 24, 23, 694127)
# 返回datetime对象的UTC时间元组部分

n.utctimetuple()
time.struct_time(tm_year=2021, tm_mon=10, tm_mday=20, tm_hour=20, tm_min=24, tm_sec=23, tm_wday=2, tm_yday=293, tm_isdst=0)

Также может быть сгенерирована дополнительная информация об атрибутах:

# 返回当前UTC日期和时间的datetime对象

print(datetime.utcnow())
2021-10-20 12:24:24.241577
# 给定时间戳的datetime对象

print(datetime.fromtimestamp(1697302830))  
2023-10-15 01:00:30
# 指定公历序数的datetime对象

print(datetime.fromordinal(738000) )
2021-07-29 00:00:00
# 拼接日期和时间

print(datetime.combine(date(2020,12,25), time(11,22,54)))  
2020-12-25 11:22:54

указать любое время

# 指定一个任意时间

d = datetime(2021,9,25,11,24,23)
print(d.date())  # 日期
print(d.time())  # 时间
print(d.timetz())  # 从datetime中拆分出具体时区属性的time

print(d.timetuple())  # 时间元组
print(d.toordinal())  # 和date.toordinal一样
print(d.weekday())  # 两种星期
print(d.isoweekday())
print(d.isocalendar())  # ISO格式化输出
print(d.isoformat())
print(d.strftime("%Y-%m-%d %H:%M:%S"))  # 指定格式
print(d.replace(year=2021,month=1))  # 替换
2021-09-25
11:24:23
11:24:23
time.struct_time(tm_year=2021, tm_mon=9, tm_mday=25, tm_hour=11, tm_min=24, tm_sec=23, tm_wday=5, tm_yday=268, tm_isdst=-1)
738058
5
6
(2021, 38, 6)
2021-09-25T11:24:23
2021-09-25 11:24:23
2021-01-25 11:24:23

форматированный вывод

# 直接对时间的格式化输出

print(datetime.strptime("2020-12-25","%Y-%m-%d"))
2020-12-25 00:00:00

Форматированный вывод для данного объекта даты и времени, такого как экземпляр объекта k, созданный выше:

k
datetime.datetime(2021, 10, 20, 20, 24, 23, 53493)
# 格式化输出

k.strftime("%Y-%m-%d %H:%M:%S")
'2021-10-20 20:24:23'

класс timedelta

Объект TIMEDELTA представляет период времени, т. е. две разницы дат или даты и времени (datetime).

Поддерживаемые на данный момент параметры: недели, дни, часы, минуты, секунды, миллисекунды, микросекунды.

текущая дата

from datetime import timedelta, date, datetime

d = date.today()  # 当前日期
d
datetime.date(2021, 10, 20)
print("今天:",d)
print("加上5天:",d + timedelta(days=5))  # 加上5天
print("加上3天+8小时:", d + timedelta(days=3,hours=8))  # 加上3天和8个小时
今天: 2021-10-20
加上5天: 2021-10-25
加上3天+8小时: 2021-10-23

текущий момент времени

# 当前时间点
now = datetime.now()  
now
datetime.datetime(2021, 10, 20, 20, 24, 26, 777335)
print(now + timedelta(hours=4))  # 加上4个小时
print(now + timedelta(weeks=2))  # 加上2个礼拜
print(now - timedelta(seconds=500))  # 减去500秒
2021-10-21 00:24:26.777335
2021-11-03 20:24:26.777335
2021-10-20 20:16:06.777335

разница объекта даты и времени

delta = datetime(2020,12,26) - datetime(2020,12,12,20,12)
print(delta)
13 days, 3:48:00
delta.days  # 日期间隔:天
13
delta.seconds  # 日期间隔:秒
13680
delta.total_seconds()  # # 全部转成秒
1136880.0

разница между двумя датами

d1 = datetime(2021,10,1)
d2 = datetime(2021,10,8)
d1.__sub__(d2)  # d1 - d2
datetime.timedelta(days=-7)
d2.__sub__(d1) # d2 - d1
datetime.timedelta(days=7)
# rsub表示用d2 - d1

d1.__rsub__(d2)   
datetime.timedelta(days=7)

Результатом разницы между двумя вышеуказанными датами является datetime.timedelta.Если получен результат целочисленного типа, действуйте следующим образом:

d1.__sub__(d2).days
-7

класс tzinfo

Основная роль заключается в указании часового пояса, в котором время

Укажите часовой пояс

from datetime import date, timedelta, datetime, timezone

tz_utc_8 = timezone(timedelta(hours=8)) # 创建时区
print(tz_utc_8)
UTC+08:00
now = datetime.now()
print(now)
2021-10-20 20:24:28.844732
new_time = now.replace(tzinfo=tz_utc_8)  # 强制加上8个小时
print(new_time)
2021-10-20 20:24:28.844732+08:00

переключатель часового пояса

# 获取UTC时间
utc_now = datetime.utcnow().replace(tzinfo=timezone.utc)  # 指定utc时区
print(utc_now)
2021-10-20 12:24:29.336367+00:00
# 通过astimezone切换到东八区

beijing = utc_now.astimezone(timezone(timedelta(hours=8)))
print(beijing)
2021-10-20 20:24:29.336367+08:00
# UTC时区切换到东九区:东京时间

tokyo = utc_now.astimezone(timezone(timedelta(hours=9)))
print(tokyo)
2021-10-20 21:24:29.336367+09:00
# 北京时间(东八区)直接切换到东京时间(东九区)

tokyo_new = beijing.astimezone(timezone(timedelta(hours=9)))
print(tokyo_new)
2021-10-20 21:24:29.336367+09:00

Общие приложения

Отметка времени до даты

import time
now_timestamp = time.time()
now_timestamp
1634732670.286224
# 1-转成具体时间点

now = time.ctime(now_timestamp)  
print(now)
Wed Oct 20 20:24:30 2021
# 2-时间戳先转成时间元组,strftime在转成指定格式

now_tuple = time.localtime(now_timestamp)
print(now_tuple)
time.struct_time(tm_year=2021, tm_mon=10, tm_mday=20, tm_hour=20, tm_min=24, tm_sec=30, tm_wday=2, tm_yday=293, tm_isdst=0)
time.strftime("%Y/%m/%d %H:%M:%S", now_tuple)
'2021/10/20 20:24:30'
# 选择一个具体的时间戳

timestamp = 1618852721

a = time.localtime(timestamp)  # 获得时间元组形式数据
print("时间元组数据:",a)
time.strftime("%Y/%m/%d %H:%M:%S", a)  # 格式化
时间元组数据: time.struct_time(tm_year=2021, tm_mon=4, tm_mday=20, tm_hour=1, tm_min=18, tm_sec=41, tm_wday=1, tm_yday=110, tm_isdst=0)





'2021/04/20 01:18:41'
time.ctime(1618852741)
'Tue Apr 20 01:19:01 2021'

Преобразование даты и времени в метку времени

Дайте данные даты строкового типа, как перевести в нужный нам формат времени?

date = "2021-10-26 11:45:34"

# 1、时间字符串转成时间数组形式
date_array = time.strptime(date, "%Y-%m-%d %H:%M:%S")
date_array
time.struct_time(tm_year=2021, tm_mon=10, tm_mday=26, tm_hour=11, tm_min=45, tm_sec=34, tm_wday=1, tm_yday=299, tm_isdst=-1)
# 2、查看时间数组数据

print("时间数组:", date_array)
时间数组: time.struct_time(tm_year=2021, tm_mon=10, tm_mday=26, tm_hour=11, tm_min=45, tm_sec=34, tm_wday=1, tm_yday=299, tm_isdst=-1)
# 3、mktime时间数组转成时间戳

time.mktime(date_array)
1635219934.0

форматирование даты

import time

old = "2021-09-12 12:28:45"

# 1、转换成时间数组
time_array = time.strptime(old, "%Y-%m-%d %H:%M:%S")

# 2、转换成新的时间格式(2021/09/12 12-28-45)
new = time.strftime("%Y/%m/%d %H-%M-%S",time_array)  # 指定显示格式

print("原格式时间:",old)
print("新格式时间:",new)
原格式时间: 2021-09-12 12:28:45
新格式时间: 2021/09/12 12-28-45