Работа с датами и временем

Как преобразовать?

Модуль datetime состоит из трех разных типов объектов: даты, времени и datetime. Очевидно, что объект date содержит дату, time – время, а datetime – дату и время.

Например, следующий код напечатает текущую дату и время:

import datetime

print ('Current date/time: {}'.format(datetime.datetime.now()))

Запуск этого кода напечатает что-то похожее на это:

$ python3 datetime-print-1.py
Current date/time: 2018-06-29 08:15:27.243860

Если пользовательское форматирование не задано, используется строковый формат по умолчанию, т.е. формат для «2018-06-29 08: 15: 27.243860» находится в формате ISO 8601 (ГГГГ-ММ-ДДТЧЧ: ММ: СС.мммммм). Если наша входная строка для создания объекта datetime имеет тот же формат ISO 8601, мы можем легко преобразовать ее в объект datetime.

Давайте посмотрим на код ниже:

import datetime

date_time_str = '2018-06-29 08:15:27.243860'
date_time_obj = datetime.datetime.strptime(date_time_str, '%Y-%m-%d %H:%M:%S.%f')

print('Date:', date_time_obj.date())
print('Time:', date_time_obj.time())
print('Date-time:', date_time_obj)

Запустив его, он напечатает дату, время и дату-время:

$ python3 datetime-print-2.py
Date: 2018-06-29
Time: 08:15:27.243860
Date-time: 2018-06-29 08:15:27.243860

В этом примере мы используем новый метод под названием strptime. Этот метод принимает два аргумента: первый – это строковое представление даты и времени, а второй – формат входной строки. Указание формата, подобного этому, значительно ускоряет синтаксический анализ, поскольку datetime не нужно пытаться интерпретировать формат самостоятельно, что намного дороже в вычислительном отношении. Возвращаемое значение имеет тип datetime.

В нашем примере «2018-06-29 08: 15: 27.243860» – это входная строка, а «% Y-% m-% d% H:% M:% S.% f» – это формат нашей строки даты. Возвращаемое значение datetime сохраняется в переменной date_time_obj. Поскольку это объект datetime, мы можем вызывать методы date() и time() непосредственно на нем. Как видно из выходных данных, он печатает часть «дата» и «время» входной строки.

Вам может быть интересно, что означает формат «% Y-% m-% d% H:% M:% S.% f». Они известны как токены формата. Каждый токен представляет собой отдельную часть даты и времени, такую как день, месяц, год и т.д. Для быстрого ознакомления вот что мы используем в приведенном выше коде:

  • % Y: год (4 цифры);
  • % m: месяц;
  • % d: день месяца;
  • % H: час (24 часа);
  • % M: минуты;
  • % S: секунды;
  • % f: микросекунды.

Ожидается, что все эти токены, кроме года, будут заполнены нулями.

Итак, если известен формат строки, ее можно легко преобразовать в объект datetime с помощью strptime. Приведу еще один нетривиальный пример:

import datetime

date_time_str = 'Jun 28 2018 7:40AM'
date_time_obj = datetime.datetime.strptime(date_time_str, '%b %d %Y %I:%M%p')

print('Date:', date_time_obj.date())
print('Time:', date_time_obj.time())
print('Date-time:', date_time_obj)

Из следующего вывода вы можете видеть, что строка была успешно проанализирована, поскольку она правильно распечатывается объектом datetime:

$ python3 datetime-print-3.py
Date: 2018-06-28
Time: 07:40:00
Date-time: 2018-06-28 07:40:00

Вот еще несколько примеров часто используемых форматов времени и токенов, используемых для синтаксического анализа:

"Jun 28 2018 at 7:40AM" -> "%b %d %Y at %I:%M%p"
"September 18, 2017, 22:19:55" -> "%B %d, %Y, %H:%M:%S"
"Sun,05/12/99,12:30PM" -> "%a,%d/%m/%y,%I:%M%p"
"Mon, 21 March, 2015" -> "%a, %d %B, %Y"
"2018-03-12T10:12:45Z" -> "%Y-%m-%dT%H:%M:%SZ"

Вы можете проанализировать строку даты и времени любого формата, используя таблицу, упомянутую в документации strptime.

Get Current Timestamp using time.ctime()

time module has another function time.ctime() i.e.

def ctime(seconds=None)
timeStr = time.ctime()

print('Current Timestamp : ', timeStr)

Output:

Current Timestamp :  Sun Nov 18 09:44:41 2018

Complete executable example is as follows,

import time

from datetime import datetime


def main():

    print('*** Get Current date & timestamp using datetime.now() ***')

    # Returns a datetime object containing the local date and time
    dateTimeObj = datetime.now()

    # Access the member variables of datetime object to print date & time information
    print(dateTimeObj.year, '/', dateTimeObj.month, '/', dateTimeObj.day)
    print(dateTimeObj.hour, ':', dateTimeObj.minute, ':', dateTimeObj.second, '.', dateTimeObj.microsecond)

    print(dateTimeObj)

    # Converting datetime object to string
    timestampStr = dateTimeObj.strftime("%d-%b-%Y (%H:%M:%S.%f)")
    print('Current Timestamp : ', timestampStr)

    timestampStr = dateTimeObj.strftime("%H:%M:%S.%f - %b %d %Y ")
    print('Current Timestamp : ', timestampStr)

    print('*** Fetch the date only from datetime object ***')

    # get the date object from datetime object
    dateObj = dateTimeObj.date()

    # Print the date object
    print(dateObj)

    # Access the member variables of date object to print
    print(dateObj.year, '/', dateObj.month, '/', dateObj.day)

    # Converting date object to string
    dateStr = dateObj.strftime("%b %d %Y ")
    print(dateStr)

    print('*** Fetch the time only from datetime object ***')

    # get the time object from datetime object
    timeObj = dateTimeObj.time()
    # Access the member variables of time object to print time information
    print(timeObj.hour, ':', timeObj.minute, ':', timeObj.second, '.', timeObj.microsecond)

    # It contains the time part of the current timestamp, we can access it's member variables to get the fields or we can directly print the object too
    print(timeObj)


    # Converting date object to string
    timeStr = timeObj.strftime("%H:%M:%S.%f")
    print(timeStr)

    print('*** Get Current Timestamp using time.time() ***')

    # Get the seconds since epoch
    secondsSinceEpoch = time.time()

    print('Seconds since epoch : ', secondsSinceEpoch)

    # Convert seconds since epoch to struct_time
    timeObj = time.localtime(secondsSinceEpoch)

    print(timeObj)

    # get the current timestamp elements from struct_time object i.e.
    print('Current TimeStamp is : %d-%d-%d %d:%d:%d' % (
    timeObj.tm_mday, timeObj.tm_mon, timeObj.tm_year, timeObj.tm_hour, timeObj.tm_min, timeObj.tm_sec))

    # It does not have the microsecond field

    print('*** Get Current Timestamp using time.ctime() *** ')

    timeStr = time.ctime()

    print('Current Timestamp : ', timeStr)


if __name__ == '__main__':
    main()

Output:

*** Get Current date & timestamp using datetime.now() ***
2018 / 11 / 18
9 : 44 : 41 . 921898
2018-11-18 09:44:41.921898
Current Timestamp :  18-Nov-2018 (09:44:41.921898)
Current Timestamp :  09:44:41.921898 - Nov 18 2018 
*** Fetch the date only from datetime object ***
2018-11-18
2018 / 11 / 18
Nov 18 2018 
*** Fetch the time only from datetime object ***
9 : 44 : 41 . 921898
09:44:41.921898
09:44:41.921898
*** Get Current Timestamp using time.time() ***
Seconds since epoch :  1542514481.9218981
time.struct_time(tm_year=2018, tm_mon=11, tm_mday=18, tm_hour=9, tm_min=44, tm_sec=41, tm_wday=6, tm_yday=322, tm_isdst=0)
Current TimeStamp is : 18-11-2018 9:44:41
*** Get Current Timestamp using time.ctime() *** 
Current Timestamp :  Sun Nov 18 09:44:41 2018

Advertisements

Python Tutorial

Python HOMEPython IntroPython Get StartedPython SyntaxPython CommentsPython Variables
Python Variables
Variable Names
Assign Multiple Values
Output Variables
Global Variables
Variable Exercises

Python Data TypesPython NumbersPython CastingPython Strings
Python Strings
Slicing Strings
Modify Strings
Concatenate Strings
Format Strings
Escape Characters
String Methods
String Exercises

Python BooleansPython OperatorsPython Lists
Python Lists
Access List Items
Change List Items
Add List Items
Remove List Items
Loop Lists
List Comprehension
Sort Lists
Copy Lists
Join Lists
List Methods
List Exercises

Python Tuples
Python Tuples
Access Tuples
Update Tuples
Unpack Tuples
Loop Tuples
Join Tuples
Tuple Methods
Tuple Exercises

Python Sets
Python Sets

Access Set Items
Add Set Items
Remove Set Items
Loop Sets
Join Sets
Set Methods
Set Exercises

Python Dictionaries
Python Dictionaries

Access Items
Change Items
Add Items

Remove Items
Loop Dictionaries
Copy Dictionaries
Nested Dictionaries
Dictionary Methods
Dictionary Exercise

Python If…ElsePython While LoopsPython For LoopsPython FunctionsPython LambdaPython ArraysPython Classes/ObjectsPython InheritancePython IteratorsPython ScopePython ModulesPython DatesPython MathPython JSONPython RegExPython PIPPython Try…ExceptPython User InputPython String Formatting

Рекантралирование

Учитывая конкретное значение dateTime, вы можете изменить его в определенный момент времени, введя его в качестве второго параметра.

Например, скажем, у нас есть определенный день, но только хочу месяц:

# 22nd November 2000
>>> day = np.datetime64('2000-11-22')
 
# Just keep the month
>>> month = np.datetime64(day, 'M')
numpy.datetime64('2000-11')
 
# Change the scale of month to hours
>>> hour_from_month = np.datetime64(month, 'h')
numpy.datetime64('2000-11-01T00','h')
 
# Change the scale of day to hours
>>> hour_from_day = np.datetime64(day, 'h')
numpy.datetime64('2000-11-22T00','h')

Обратите внимание, что часть DD для и разные. Первый имеет 01 и последний 22

Это потому, что numpy возвращается к значениям по умолчанию, если никто не указан. Это логически, 01 для M и D и 0 для переменных времени.

Чтобы проверить единицу времени объект, мы просто используем атрибут:

>>> day.dtype
dtype('>> month.dtype
dtype('')')>

Легко.

Как рассчитать прошедшее или оставшееся время в Python

Давайте теперь посчитаем, сколько времени осталось до Дня учителя в этом году в России отмечается 05 октября). Сделать это можно следующим образом. Чтобы вычислить с учетом сегодняшнего дня, мы можем вызвать метод объекта для получения сегодняшней даты.

Синтаксис:

teachers_day = date(time_now.year, 10, 5)
today = date.today()

Затем мы можем узнать, сколько дней осталось до Дня учителя, используя следующий фрагмент кода:

time_to_td = teachers_day - today
print(f"Teachers' day is {time_to_td.days} days away")

# Пример вывода
# Teachers' day is 105 days away

Также возможно, что в этом году День учителя пройдет к тому времени, когда вы прочтете эту статью . Если День учителя в этом году уже прошел, сделайте следующее:

  1. Обновите интересующую дату на дату Дня учителя в следующем году.
  2. Подсчитайте, сколько дней осталось до Дня Учителя в следующем году.

Это показано в следующем фрагменте кода:

if teachers_day < today:
   print(f"This year's Teachers' Day was {(today-teachers_day).days} days ago")
   teachers_day = date(time_now.year + 1, 10, 5)
   time_to_td = teachers_day - today
   print(f"Next year's Teachers' day is {time_to_td.days} days away")

Получение текущего объекта datetime

Теперь для большинства реальных программ можно использовать текущее время и сохранить его как объект datetime. Мы можем использовать функцию datetime.now() для отображения текущего времени как объекта datetime.

from datetime import datetime

Давайте теперь рассмотрим пример.

from datetime import datetime

current_datetime = datetime.now()
print(current_datetime)

Выход

datetime.datetime(2020, 6, 27, 22, 45, 54, 267673)

Выход совпадает. В нем указано, что текущее время — 27 июня 2020 года, 22:45:54 по моему местному часовому поясу (IST).

Теперь мы также можем использовать базовые операторы для получения прошлого или будущего времени.

from datetime import datetime, timedelta

current_datetime = datetime.now()

# future dates
one_year_future_date = current_datetime + timedelta(days=365)

print('Current Date:', current_datetime)
print('One year from now Date:', one_year_future_date)

# past dates
three_days_before_date = current_datetime - timedelta(days=3)
print('Three days before Date:', three_days_before_date)

Выход

Current Date: 2020-06-27 22:45:54.267673
One year from now Date: 2021-06-27 22:45:54.267673
Three days before Date: 2020-06-24 22:45:54.267673

Starting Your PyCon Countdown

Now you have enough information to start working on a countdown clock for next year’s PyCon US! PyCon US 2021 will start on May 12, 2021 in Pittsburgh, PA. With the 2020 event having been canceled, many Pythonistas are extra excited for next year’s gathering. This is a great way to keep track of how long you’ll need to wait and boost your skills at the same time!

To get started, create a file called and add this code:

In this code, you import from and define a constant, , that stores the date of the next PyCon US. You don’t expect the date of PyCon to change, so you name the variable in all caps to indicate that it’s a constant.

Next, you compute the difference between , which is the current time, and . Taking the difference between two instances returns a instance.

instances represent the change in time between two instances. The delta in the name is a reference to the Greek letter delta, which is used in science and engineering to mean a change. You’ll learn more about how to use for more general arithmetic operations.

Finally the printed output, as of April 9, 2020 at a little before 9:30 PM is:

Programming With Dates and Times

If you’ve ever worked on software that needed to keep track of times across several geographic areas, then you probably have a sense of why programming with time can be such a pain. The fundamental disconnect is that computer programs prefer events that are perfectly ordered and regular, but the way in which most humans use and refer to time is highly irregular.

Note: If you want to learn more about why time can be so complicated to deal with, then there are many great resources available on the web. Here are a few good places to start:

  • Computerphile: The Problem With Time & Timezones
  • Working With Time Zones: Everything You Wish You Didn’t Need to Know
  • The Complexity of Time Data Programming

One great example of this irregularity is daylight saving time. In the United States and Canada, clocks are set forward by one hour on the second Sunday in March and set back by one hour on the first Sunday in November. However, this has only been the case since 2007. Prior to 2007, clocks were set forward on the first Sunday in April and set back on the last Sunday in October.

Things get even more complicated when you consider time zones. Ideally, time zone boundaries would follow lines of longitude exactly. However, for historical and political reasons, time zone lines are rarely straight. Often, areas that are separated by large distances find themselves in the same time zone, and adjacent areas are in different time zones. There are some time zones out there with pretty funky shapes.

np.timedelta64.

Любая арифметика, которая сложнее, чем добавление или вычитание целые числа включает в себя Отказ Уравнение либо вернет объект или вам нужно будет использовать один, чтобы получить результат.

Если вы все поняли до этого момента, вы легко поймете это. Это лучше всего объяснено в примерах.

Количество дней с 1 января 2013 года и 1 января 2012 года 366, так как это был скачок года.

>>> np.datetime64('2013-01-01') - np.datetime64('2012-01-01')
numpy.timedelta64(366,'D')
 
# Add on 15 days to June 2000
>>> np.datetime64('2000-05') + np.timedelta64(15, 'D')
numpy.datetime64('2000-05-16')
 
# What is 5 hours after 1pm on 22nd Nov 2000?
>>> np.datetime64('2000-11-22 13:00') + np.timedelta64(5, 'h')
numpy.datetime64('2000-11-22T18:00')

Каждый Объект принимает одно целое и однократное устройство. Таким образом, чтобы добавить через 4 месяца и 3 дня, у вас есть два варианта.

Первый – использовать два экземпляра :

# Add on 4 months and 3 days
>>> some_date + np.timedelta64(4, 'M') + np.timedelta64(3, 'D')

Второе – преобразовать отдельный объекты в один с использованием разделения (или модуло):

# 1 day is 24 hours
>>> np.timedelta64(1, 'D') / np.timedelta64(1, 'h')
24.0
 
# 1 week is 10,080 minutes
>>> np.timedelta64(1, 'W') / np.timedelta64(1, 'm')
10080.0
 
# 1 month is ??? days
>>> np.timedelta64(1, 'M') / np.timedelta64(1, 'D')
TypeError: Cannot get a common metadata divisor for NumPy datetime metadata  and  because they have incompatible nonlinear base time units

Обратите внимание, что в месяц, так и год не являются определенной длиной. Таким образом, вы не можете преобразовать их в другие, меньшие единицы

Большинство людей согласились бы, что через месяц после 31 января 28 февраля. Но что через месяц после 28 февраля? 28 марта или 31 марта? Так что numpy бросает ошибку, если вы попытаетесь изменить месяц/год объект со временным устройством или меньше.

# Both work because time unit is 'M'
 
# Add 1 month
>>> np.datetime64('2000-02') + np.timedelta64(1, 'M')
numpy.datetime64('2000-03')
 
# Add 1 year
>>> np.datetime64('2000-02') + np.timedelta64(1, 'Y')
numpy.datetime64('2001-02')

Как только мы получим более точные, значения месяца и года не являются постоянными, а Numpy бросает ошибку.

# Neither work because time unit is 'D'
 
# Add 1 month
>>> np.datetime64('2000-02-01') + np.timedelta64(1, 'M')
TypeError: ...
 
# Add 1 year
>>> np.datetime64('2000-02-01') + np.timedelta64(1, 'Y')
TypeError: ...

Мы теперь оснащены, чтобы построить список любых дат и времена нашего сердца! Итак, давайте построим один, содержащий все рождественские дни за последние 50 лет. Мы начнем с последних декабря. 2018-12 и повторяйте через него 50 раз назад. Для первой итерации мы вычвеем один год (чтобы получить 2017 год), для второго мы вычитаем 2 года (чтобы получить 2016 год) и так далее. Наконец, в каждой итерации мы добавляем 24 дня (поскольку день по умолчанию 01). Мы сделаем все это, используя один из наиболее любимых аспектов Python: понимание списка!

# Start with 2018-12
>>> all_christmas_days = 
 
# Contains 50 years
>>> len(all_christmas_days)
50
 
# First 3 years
>>> all_christmas_days

 
# Last 3 years (we start counting at -1 and the end index is excluded)
>>> all_christmas_days

Теперь мы знаем ответы на вопросы 1 и 2, которые я спросил в начале.

  1. Сколько дней в месяце?
  2. Сколько секунд между 1 марта 2019 года в 13:00 и 4 марта 2019 года на 2 утра именно?
# Subtract both dates written with time unit 's'
>>> np.datetime64('2019-03-04 02:00:00') \
  - np.datetime64('2019-03-01 13:00:00')
 
numpy.timedelta64(219600,'s')

Но как насчет вопроса 3? Это было о рабочих днях, поэтому давайте узнаем о них сейчас.

4 ответа

Лучший ответ

Чтобы сделать это максимально простым для работы, есть два шага: преобразование timedelta в int или float и сохранение его в хранилище данных. Перво-наперво, преобразование таймделты в микротайм:

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

Теперь вы можете использовать это свойство как любое другое:

12

Nick Johnson
10 Мар 2010 в 10:20

В конечном итоге это сработало:

В основном, необходимо получить микросекунды из временной дельты и преобразовать ее в миллисекунды.

Sologoub
10 Мар 2010 в 04:37

Если вы собираетесь хранить его как (что, я согласен, хорошая идея), я бы расширил — тогда вы получите различные биты для анализа и проверки бесплатно.

Кроме того , хранение как как может быть намного легче , чем другие методы, указанные здесь , путем сохранения его в качестве DateTime на некотором расстоянии от опорной DateTime , таким образом, что разность представляет timedelta . Это действительно легко благодаря перегрузке оператора, который дает нам модуль datetime.

Точность

в Python может обрабатывать дельты примерно +/- 2,7 миллиона лет. Тем не менее, охватывает только диапазон около 10000 лет. Чтобы сохранить большую временную дельту в дате и времени, вам придется сделать некоторые изменения и пожертвовать некоторой точностью.

Приведенный выше подход ограничивает временные интервалы до половины этого диапазона — около +/- 5000 лет из-за выбора эталонной даты и времени.

Если вы знаете, что ваша временная дельта всегда будет положительной, вы можете использовать (или, если вы знаете, что она всегда будет отрицательной, вы можете использовать ), чтобы получить полный диапазон около 10000 лет.

1

Stu Cox
20 Май 2012 в 13:25

Вам все еще нужно будет преобразовать дельту в разрешение по вашему выбору, используя атрибуты дней, минут, секунд и микросекунд дельты времени.

Brian Luft
10 Мар 2010 в 00:40

datetime.timedelta

A object represents the difference between two dates or times.

Example 11: Difference between two dates and times

When you run the program, the output will be:


t3 = 201 days, 0:00:00
t6 = -333 days, 1:14:20
type of t3 = <class 'datetime.timedelta'>
type of t6 = <class 'datetime.timedelta'>

Notice, both t3 and t6 are of type.

Example 12: Difference between two timedelta objects

When you run the program, the output will be:


t3 = 14 days, 13:55:39

Here, we have created two objects t1 and t2, and their difference is printed on the screen.

When you run the program, the output will be:


t3 = -1 day, 23:59:39
t3 = 0:00:21

Example 14: Time duration in seconds

You can get the total number of seconds in a timedelta object using method.

When you run the program, the output will be:


total seconds = 435633.233423

You can also find sum of two dates and times using operator. Also, you can multiply and divide a object by integers and floats.

Alternatives to Python datetime and dateutil

Python and are a powerful combination of libraries when you’re working with dates and times. is even recommended in the Python documentation. However, there are many other libraries that you can use to work with dates and times in Python. Some of these rely on and , while others are completely independent replacements:

  • pytz provides time zone information similar to . It uses a somewhat different interface than the standard , so be aware of the potential problems if you decide to use it.
  • Arrow provides a drop-in replacement for . It’s inspired by , so if you’re coming from web development, then this might be a more familiar interface.
  • Pendulum provides another drop-in replacement for . It includes a time zone interface and an improved implementation.
  • Maya provides a similar interface as . It relies on Pendulum for parts of the parsing library.
  • dateparser provides an interface to generate instances from human-readable text. It’s flexible and supports many languages.

In addition, if you work heavily with NumPy, Pandas, or other data science packages, then there are a few options that might be useful to you:

Maya

Maya также упрощает синтаксический анализ строки и изменение часовых поясов. Здесь показаны несколько простых примеров:

import maya

dt = maya.parse('2018-04-29T17:45:25Z').datetime()
print(dt.date())
print(dt.time())
print(dt.tzinfo)

Вывод:

$ python3 maya-1.py
2018-04-29
17:45:25
UTC

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

import maya

dt = maya.parse('2018-04-29T17:45:25Z').datetime(to_timezone='America/New_York', naive=False)
print(dt.date())
print(dt.time())
print(dt.tzinfo)

Вывод:

$ python3 maya-2.py
2018-04-29
13:45:25
America/New_York

Разве не так просто использовать? Давайте попробуем Maya с тем же набором строк, который мы использовали с dateutil:

import maya

date_array = [
    '2018-06-29 08:15:27.243860',
    'Jun 28 2018 7:40AM',
    'Jun 28 2018 at 7:40AM',
    'September 18, 2017, 22:19:55',
    'Sun, 05/12/1999, 12:30PM',
    'Mon, 21 March, 2015',
    '2018-03-12T10:12:45Z',
    '2018-06-29 17:08:00.586525+00:00',
    '2018-06-29 17:08:00.586525+05:00',
    'Tuesday , 6th September, 2017 at 4:30pm'
]

for date in date_array:
    print('Parsing: ' + date)
    dt = maya.parse(date).datetime()
    print(dt)
    print(dt.date())
    print(dt.time())
    print(dt.tzinfo)

Вывод:

$ python3 maya-3.py
Parsing: 2018-06-29 08:15:27.243860
2018-06-29 08:15:27.243860+00:00
2018-06-29
08:15:27.243860
UTC

Parsing: Jun 28 2018 7:40AM
2018-06-28 07:40:00+00:00
2018-06-28
07:40:00
UTC

Parsing: Jun 28 2018 at 7:40AM
2018-06-28 07:40:00+00:00
2018-06-28
07:40:00
UTC

Parsing: September 18, 2017, 22:19:55
2017-09-18 22:19:55+00:00
2017-09-18
22:19:55
UTC

Parsing: Sun, 05/12/1999, 12:30PM
1999-05-12 12:30:00+00:00
1999-05-12
12:30:00
UTC

Parsing: Mon, 21 March, 2015
2015-03-21 00:00:00+00:00
2015-03-21
00:00:00
UTC

Parsing: 2018-03-12T10:12:45Z
2018-03-12 10:12:45+00:00
2018-03-12
10:12:45
UTC

Parsing: 2018-06-29 17:08:00.586525+00:00
2018-06-29 17:08:00.586525+00:00
2018-06-29
17:08:00.586525
UTC

Parsing: 2018-06-29 17:08:00.586525+05:00
2018-06-29 12:08:00.586525+00:00
2018-06-29
12:08:00.586525
UTC

Parsing: Tuesday , 6th September, 2017 at 4:30pm
2017-09-06 16:30:00+00:00
2017-09-06
16:30:00
UTC

Как видите, все форматы даты были успешно проанализированы.

Но вы заметили разницу? Если мы не предоставляем информацию о часовом поясе, он автоматически преобразует ее в UTC

Итак, важно отметить, что мы должны предоставить параметры to_timezone и naive, если время не в формате UTC.

Operations

Вы можете работать с Series / DataFrames и создавать помощью операций вычитания для Series или .

In  s = pd.Series(pd.date_range("2012-1-1", periods=3, freq="D"))

In  td = pd.Series()

In  df = pd.DataFrame({"A": s, "B": td})

In  df
Out: 
           A      B
 2012-01-01  days
1 2012-01-02 1 days
2 2012-01-03 2 days

In  df = df + df

In  df
Out: 
           A      B          C
 2012-01-01  days 2012-01-01
1 2012-01-02 1 days 2012-01-03
2 2012-01-03 2 days 2012-01-05

In  df.dtypes
Out: 
A     datetime64
B    timedelta64
C     datetime64
dtype: object

In  s - s.max()
Out: 
   -2 days
1   -1 days
2     days
dtype: timedelta64

In  s - datetime.datetime(2011, 1, 1, 3, 5)
Out: 
   364 days 20:55:00
1   365 days 20:55:00
2   366 days 20:55:00
dtype: timedelta64

In  s + datetime.timedelta(minutes=5)
Out: 
   2012-01-01 00:05:00
1   2012-01-02 00:05:00
2   2012-01-03 00:05:00
dtype: datetime64

In  s + pd.offsets.Minute(5)
Out: 
   2012-01-01 00:05:00
1   2012-01-02 00:05:00
2   2012-01-03 00:05:00
dtype: datetime64

In  s + pd.offsets.Minute(5) + pd.offsets.Milli(5)
Out: 
   2012-01-01 00:05:00.005
1   2012-01-02 00:05:00.005
2   2012-01-03 00:05:00.005
dtype: datetime64

Операции со скалярами из :

In : y = s - s

In : y
Out: 
0   0 days
1   1 days
2   2 days
dtype: timedelta64

Поддерживаются серии timedeltas со значениями :

In : y = s - s.shift()

In : y
Out: 
      NaT
1   1 days
2   1 days
dtype: timedelta64

Элементы могут быть установлены в с помощью аналогично datetimes:

In : y = np.nan

In : y
Out: 
0      NaT
1      NaT
2   1 days
dtype: timedelta64

Операнды также могут появляться в обратном порядке (единичный объект оперирует серией):

In : s.max() - s
Out: 
   2 days
1   1 days
2    days
dtype: timedelta64

In : datetime.datetime(2011, 1, 1, 3, 5) - s
Out: 
   -365 days +03:05:00
1   -366 days +03:05:00
2   -367 days +03:05:00
dtype: timedelta64

In : datetime.timedelta(minutes=5) + s
Out: 
   2012-01-01 00:05:00
1   2012-01-02 00:05:00
2   2012-01-03 00:05:00
dtype: datetime64

и соответствующие поддерживаются в кадрах:

In : A = s - pd.Timestamp("20120101") - pd.Timedelta("00:05:05")

In : B = s - pd.Series(pd.date_range("2012-1-2", periods=3, freq="D"))

In : df = pd.DataFrame({"A": A, "B": B})

In : df
Out: 
                  A       B
 -1 days +23:54:55 -1 days
1    days 23:54:55 -1 days
2   1 days 23:54:55 -1 days

In : df.min()
Out: 
A   -1 days +23:54:55
B   -1 days +00:00:00
dtype: timedelta64

In : df.min(axis=1)
Out: 
   -1 days
1   -1 days
2   -1 days
dtype: timedelta64

In : df.idxmin()
Out: 
A    
B    
dtype: int64

In : df.idxmax()
Out: 
A    2
B    
dtype: int64

также поддерживаются в Series. Скалярным результатом будет .

In : df.min().max()
Out: Timedelta('-1 days +23:54:55')

In : df.min(axis=1).min()
Out: Timedelta('-1 days +00:00:00')

In : df.min().idxmax()
Out: 'A'

In : df.min(axis=1).idxmin()
Out: 

Вы можете выполнять fillna на timedeltas,передавая timedelta для получения определенного значения.

In : y.fillna(pd.Timedelta())
Out: 
    days
1    days
2   1 days
dtype: timedelta64

In : y.fillna(pd.Timedelta(10, unit="s"))
Out: 
    days 00:00:10
1    days 00:00:10
2   1 days 00:00:00
dtype: timedelta64

In : y.fillna(pd.Timedelta("-1 days, 00:00:05"))
Out: 
   -1 days +00:00:05
1   -1 days +00:00:05
2     1 days 00:00:00
dtype: timedelta64

Вы также можете отрицать, умножать и использовать на :

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector