Работа с датами и временем
Содержание:
- Как преобразовать?
- Get Current Timestamp using time.ctime()
- Python Tutorial
- Рекантралирование
- Как рассчитать прошедшее или оставшееся время в Python
- Получение текущего объекта datetime
- Starting Your PyCon Countdown
- Programming With Dates and Times
- np.timedelta64.
- 4 ответа
- Точность
- datetime.timedelta
- Alternatives to Python datetime and dateutil
- Maya
- Operations
Как преобразовать?
Модуль 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
Также возможно, что в этом году День учителя пройдет к тому времени, когда вы прочтете эту статью . Если День учителя в этом году уже прошел, сделайте следующее:
- Обновите интересующую дату на дату Дня учителя в следующем году.
- Подсчитайте, сколько дней осталось до Дня Учителя в следующем году.
Это показано в следующем фрагменте кода:
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 марта 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
Вы также можете отрицать, умножать и использовать на :