Меню

Python как получить дату из строки



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

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

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

После запуска этого кода в консоль выводится следующее:

Без заданного форматирования используется формат строки по умолчанию — «2018-06-29 08:15:27.243860». Это стандарт ISO 8601 (YYYY-MM-DDTHH:MM:SS.mmmmmm). Если мы вводим строку в формате ISO 8601, то мы можем легко задать ее в качестве значения объекту datetime .

После запуска кода в консоль выводится дата, время и дата со временем:

В этом примере мы используем метод 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» . Символы внутри — это токены. Каждый токен представляет собой часть даты и времени: день, месяц, год и т. д. Ознакомьтесь с документацией, если хотите узнать о видах форматирования, поддерживаемых Python. Краткая справка:

%Y : Год (4 цифры)
%m : Месяц
%d : День месяца
%H : Часы (24-часовой формат)
%M : Минуты
%S : Секунды
%f : Миллисекунды

Метод ожидает, что все токены будут дополнены нулями.

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

Как видите, эта строка была обработана без проблем. Вывод следующий:

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

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

Работаем с часовыми поясами

Работу со временем и датой могут усложнить часовые пояса. Все примеры, которые мы обсуждали, — довольно примитивные объекты datetime . То есть, они не содержат данные о часовом поясе. Но у объекта datetime есть переменная, хранящая информацию о часовом поясе, — tzinfo .

Вывод tzinfo None — это примитивный datetime -объект. Для конвертирования часовых поясов в Python есть библиотека pytz . Как ее установить, описано здесь. Мы не будем подробно останавливаться на установке, а просто покажем, как использовать pytz для конвертирования времени в UTC.

+00:00 — разница между выводимым в консоль временем и UTC. В этом примере значение tzinfo — UTC, поэтому смещение 00:00 . В данном случае объект datetime учитывает часовой пояс.

Точно так же мы можем преобразовать строки с датой и временем в любой другой часовой пояс. Например, мы можем преобразовать строку «2018-06-29 17:08:00.586525+00:00» в часовой пояс «Америка/Нью-Йорк»:

В начале программы мы конвертировали строку в datetime -объект, date_time_obj . Затем мы конвертировали его в datetime -объект с часовым поясом — timezone_date_time_obj . Поскольку мы поставили часовой пояс «Америка/Нью-Йорк», в выводе отобразится время, отстающее от UTC на 4 часа. Подробнее познакомиться с часовыми поясами можно здесь.

Изменение часовых поясов

Мы можем изменять часовые пояса datetime -объектов. Делается это следующим образом:

В начале программы мы создали datetime -объект и установили часовой пояс «Америка/Нью-Йорк». После этого мы использовали метод astimezone() , чтобы поменять часовой пояс на «Европа/Лондон». Вывод этих двух объектов в консоли:

Как и ожидалось, время отличается: между часовыми поясами разница в пять часов.

Использование сторонних библиотек

Модуль datetime может конвертировать любые строки в datetime -объекты. Но есть проблема: для этого необходимо написать подходящее форматирование, которое strptime сможет понять. На это уходит время, код становится сложнее читать. Для упрощения этого процесса можно использовать сторонние библиотеки.

Бывает, что сторонние библиотеки имеют более удобные методы манипуляции и сравнения дат и времени. В некоторых даже встроены часовые пояса — вам не придется импортировать лишние библиотеки.

Познакомимся с некоторыми из них.

dateutil

Модуль dateutil — расширение модуля datetime . Главное преимущество — не нужно писать код для парса строки. Пример:

Функция parse автоматически парсит строку и сохранит ее в переменной datetime . Парсинг происходит автоматически. То есть, отпадает нужда в форматировании. Попробуем спарсить разные типы строк с помощью dateutil :

Как видите, с помощью модуля dateutil легко парсится практически любая строка.

Хоть это и удобно, но помните — прогнозирование формата замедляет выполнение кода. Если это критично — этот модуль не для вас.

Maya также может упростить парсинг строк и смену часовых поясов. Простые примеры:

Просто, не так ли? Опробуем maya с тем же списком строк, который был в случае с dateutil :

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

Но заметили ли вы разницу? Если мы не указываем часовой пояс, он автоматически конвертируется в UTC. Именно поэтому важно запомнить, что нужно указать параметры to_timezone и naive , если время не в UTC.

Arrow

Arrow — еще одна библиотека для работы с датой и временем. Как и maya , эта библиотека определяет формат даты и времени. После выполнения кода возвращается datetime -объект из объекта arrow .

Попробуем спарсить ту же строку, которая была в примере с maya:

Изменить часовой пояс можно с помощью метода to :

Как видите, строка с датой и временем конвертировалась в регион «Америка/Нью-Йорк».

Попробуем спарсить список строк из примеров выше:

Половина строк, которые закомментированы, вызовут ошибку. Вывод остальных:

Для того чтобы спарсить закомментированные строки, необходимо указать токены. Они должны помочь библиотеке понять, как правильно их парсить. Например, «MMM» — для названий месяца воде «Jan, Feb, Mar». Документацию, в которой подробно рассказывается обо всех токенах, можно прочесть здесь.

Источник статьи: http://pythonist.ru/preobrazovanie-strok-v-datu-so-vremenem/

Python date string to date object

How do I convert a string to a date object in python?

The string would be: «24052010» (corresponding to the format: «%d%m%Y» )

I don’t want a datetime.datetime object, but rather a datetime.date.

9 Answers 9

You can use strptime in the datetime package of Python:

Directly related question:

but you still get the traceback above.

If you are lazy and don’t want to fight with string literals, you can just go with the parser module.

Just a side note, as we are trying to match any string representation, it is 10x slower than strptime

you have a date string like this, «24052010» and you want date object for this,

this cus_date will give you date object.

you can retrieve date string from your date object using this,

For single value the datetime.strptime method is the fastest

For a list of values the pandas pd.to_datetime is the fastest

For ISO8601 datetime format the ciso8601 is a rocket

There is another library called arrow really great to make manipulation on python date.

string «24052010» In a very manual way you could just go like this:- first split the string as (yyyy-mm-dd) format so you could get a tuple something like this (2010, 5, 24), then simply convert this tuple to a date format something like 2010-05-24.

you could run this code on a list of string object similar to above and convert the entire list of tuples object to date object by simply unpacking(*tuple) check the code below.

Use time module to convert data.

Linked

Related

Hot Network Questions

Subscribe to RSS

To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

Site design / logo © 2022 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2022.12.21.43127

By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.

Источник статьи: http://stackoverflow.com/questions/2803852/python-date-string-to-date-object

Python String to DateTime using strptime()

Updated on: December 5, 2021 | 2 Comments

In this tutorial, we’ll see how to parse a string to a datetime using the strptime() with the various standard date formatting codes available in Python. In addition, we will see similar methods available in the other modules for converting a string to a date or time object.

Table of contents

Steps to Convert String to DateTime in Python

In some cases, date and time could be passed as a string object. To convert a string into a datetime object, we can use the strptime() function of a datetime module.

For example, you may need to convert a numerical string like 13-05-2021 to a datetime object. or you want to convert string representing dates like Monday, 13 May, 2021 to a datetime object.

The below steps shows how to convert a string representing a date to a datetime object

Python’s datetime module provides functions that handle many complex functionalities involving the date and time.
Import datetime class using a from datetime import datetime statement

Use strptime() function of a datetime class

Use datetime.strptime(date_string, format) to convert a given string into a datetime object as per the corresponding format .
The format codes are standard directives for mentioning the format of the string for parsing. For example, The %d-%m-%Y format codes are for dd-mm-yyyy

Use strptime() function of a time module

Use this step if you want to convert a string to a time object. Use the time.strptime(string[, format]) function. This function converts time in string format to a time object in time.struct_time format.

Example: Parse String to Datetime

Let us see with an example where we have a string representing the date and time in the standard format ( dd/mm/yyyy hh:mm:ss ).

String to Date Object

  • First, convert a string to a datetime object using the strptime() function
  • Use datetime.date() function to extract only the date object from the datetime instance.

Note: If a string represents the date without time, use only %d/%m/%Y format codes.

String to time Object

Also, you can use the datetime.time class to convert a string containing the time to a time object.

  • First, convert a string to a datetime object
  • Use datetime.time() function to extract only the time object from the datetime instance.

Note: If a string represents the time without date, use only %H/%M/%S format codes.

String to time Object using Time Module

We can use the time module’s strptime () method to convert time in string format to a time object in time.struct_time format.

Let us see with an example where we have a string mentioning the time in the hours-minutes-seconds format (hh:mm:ss) .

How strptime() works?

This method basically converts the string into a datetime object according to a format.

Note: In case the string argument that is passed to the strptime() method doesn’t match the format specified, a ValueError will be raised.

The exception will have an error message that shows a format mismatch or extra data in the string. We can catch the error using exception handling inside a try-excep t block.

strptime() Formatting Codes

The strptime() takes some standard directives for mentioning the format of the string for parsing. The following table provides a summary of the available directives for the strptime() function.

The same set of directives are shared between both the strptime() and strftime() methods.

Now we can see more combinations with examples for a better understanding of the directives. The below format code works on all platforms with a standard C implementation.

Directive Description Example
%d Day of the month as a zero-padded decimal number. Sun, Mon, …, Sat (en_US);
So, Mo, …, Sa (de_DE)
%m Month of the year as a zero-padded decimal number. Sunday, Monday, …, Saturday (en_US);
Sonntag, Montag, …, Samstag (de_DE)
%Y A year with a century in four-digit format 0001, 2021, … , 9999
%y A year without a century in two-digit format 01, 21, …, 31
%A Full name of a weekday as per the locale’s name. Sunday, …, Saturday (en_US);
Sonntag, …, Samstag (de_DE)
%a Short name of a weekday as the locale’s abbreviated name. Sun, …, Sat (en_US);
So, …, Sa (de_DE)
%B Full name of a month as per the locale’s name January, …, December (en_US);
Januar, …, Dezember (de_DE)
%b Short name of a month as the locale’s abbreviated name. Jan, …, Dec (en_US);
Jan, …, Dez (de_DE)
%H Hour (24-hour clock) as a zero-padded decimal number. 01, 02, … , 23
%I Hour (12-hour clock) as a zero-padded decimal number. 01, 02, …, 12
%p Locale’s equivalent of either AM or PM. AM, PM (en_US);
am, pm (de_DE)
%M Minute as a zero-padded decimal number. 00, 01, …, 59
%S Second as a zero-padded decimal number. 00, 01, …, 59
%f Microsecond as a decimal number, zero-padded on the left. 000000, 000001, …, 999999
%z UTC offset in the form ±HHMM[SS[.ffffff]] (empty string if the object is naive). (empty), +0000, -0400, +1030, +063415, -030712.345216
%Z Time zone name (empty string if the object is naive). (empty), UTC, GMT
%j Day of the year as a zero-padded decimal number. 001, 002, …, 366
%U Week number of the year (Sunday as the first day of the week) as a zero-padded decimal number. All days in a new year preceding the first Sunday are considered to be in week 0. 00, 01, …, 53
%W Week number of the year (Monday as the first day of the week) as a decimal number. All days in a new year preceding the first Monday are considered to be in week 0. 00, 01, …, 53
%c Locale’s appropriate date and time representation. Tue Aug 16 21:30:00 1988 (en_US);
Di 16 Aug 21:30:00 1988 (de_DE)
%x Locale’s appropriate date representation. 08/16/88 (None);
08/16/1988 (en_US);
16.08.1988 (de_DE)
%X Locale’s appropriate time representation. 21:30:00 (en_US);
21:30:00 (de_DE)
%% A literal ‘%’ character. %

strptime() Date format codes

String with Day and Month Name to Datetime

We can parse a string with full or abbreviated weekday and full or abbreviated month names to a datetime object using the following format codes.

  • %A : Returns the full name of the weekday. Like, Monday, Tuesday
  • %a : Returns the short name of the weekday (First three character.). Like, Mon, Tue
  • %B : Returns the full name of the month. Like, June, March
  • %b : Returns the short name of the month (First three character.). Like, Mar, Jun

Example 1: String with Full Day and Month Name

Example 2: String with abbreviated Day and Month Names

Parse String with AM/PM to a Datetime

We can parse a string with AM/PM details to a datetime object using the format directive %p .

Parse String with Timezone to Datetime

We can convert a string with offset information represented as timedelta (+/-) or with the timezone names to the datetime object using the %z and %Z format directives.

Read: Working with Timezones in Python

Parse String with Locale to DateTime

We can understand from the directives that strptime() method supports both the US locale en_US and the german locale de_DE.

Parsing String in ISO 8601 Date format

We can parse string objects with dates in ISO 8601 formats using the strptime() method where the offset could be parsed using the %z format directive.

Convert String to TimeStamp

  • First, use the strptime() method to convert a string object to datetime .
  • Next, use the timestamp() function to extract the timestamp information

Parsing Date String with other Python libraries

While the datetime module’s strptime() handles most of the date formats, there are few drawbacks, as mentioned below.

  • We need to import many modules like datetime , time , calendar , pytz , and more to handle some complex date formats.
  • Handling naive and aware timezones are complicated.
  • Parsing the different locale information and formats like ISO 8601 is error-prone.

Parsing String to DateTime Using dateutil

The dateutil module offers a parser to parse the date string which offers a generic parser that parses almost all the known date/time formats available.

Note: It is a third-party module you need to install it separately using the pip command.

In case the dates are ambiguous i.e; some information is omitted, the following rules are applied.

  • If AM or PM is left unspecified, a 24-hour clock is assumed; however, an hour on a 12-hour clock (0 date.datetime object is used. If this results in a day number exceeding the valid number of days per month, the value falls back to the month’s end.

Parsing String to DateTime Using Arrow

Arrow is another Python library that helps in creating the date and time objects with fewer imports and lesser code. This API enables bridge gaps in creating, formatting, and modifying dates, times, and timestamps.

Arrow helps in parsing date string formats and simplifies creating UTC by default or time-zone-aware objects.

We need first to install the arrow using the pip .

Use the arrow.get() method to parse a string to date.

Parsing String to Date using Maya

Maya is another Python library mainly for dealing with different locales in different systems. This is especially helpful when the same code has to be migrated to operating systems in different timezones.

We need to install Maya using the following pip command.

For parsing a string object to date we need to use the parse () method and the datetime() method to create the datetime object.

Did you find this page helpful? Let others know about it. Sharing helps me continue to create free Python resources.

About Vishal

Founder of PYnative.com I am a Python developer and I love to write articles to help developers. Follow me on Twitter. All the best for your future Python endeavors!

Related Tutorial Topics:

Python Exercises and Quizzes

Free coding exercises and quizzes cover Python basics, data structure, data analytics, and more.

Источник статьи: http://pynative.com/python-string-to-datetime-strptime/

Работа с датой и временем: модуль datetime

В этой статье мы разберемся, как работать с датой и временем в Python при помощи модуля datetime. И для начала давайте напишем несколько простых программ, связанных с датой и временем.

Пример 1: Получение текущей даты и времени.

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

В этом примере мы импортировали модуль datetime с помощью оператора import datetime .

Одним из классов, определенных в модуле datetime, является класс datetime . После импортирования модуля мы использовали метод now() для создания объекта datetime , содержащего текущие локальные дату и время.

Пример 2: Получение текущей даты.

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

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

Что находится внутри datetime?

Мы можем использовать функцию dir() для получения списка, содержащего все атрибуты модуля datetime.

Когда вы запустите программу, вывод будет следующим:

[‘MAXYEAR’, ‘MINYEAR’, ‘__builtins__’, ‘__cached__’, ‘__doc__’, ‘__file__’, ‘__loader__’, ‘__name__’, ‘__package__’, ‘__spec__’, ‘date’, ‘datetime’, ‘datetime_CAPI’, ‘sys’, ‘time’, ‘timedelta’, ‘timezone’, ‘tzinfo’]

Наиболее часто используемыми классами в модуле datetime являются:

Класс datetime.date

Объект date представляет дату (год, месяц и день).

Пример 3: объект date для представления даты.

Когда вы запустите программу, вывод будет следующим:

В приведенном выше примере date() является конструктором класса date . Конструктор принимает три аргумента: год, месяц и день.

Переменная d — это объект date .

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

Пример 4: Получение текущей даты.

Для получения информации о текущей дате можно воспользоваться методом today() .

Когда вы запустите программу, вывод будет следующим:

Пример 5: получение даты из метки времени (timestamp).

Мы также можем создавать объекты date из метки времени (timestamp). Термин timestamp употребляется для обозначения POSIX-времени — количества секунд, прошедшего с 00:00:00 UTC 1 января, 1970 года. Вы можете преобразовать метку времени в дату при помощи метода fromtimestamp() .

Когда вы запустите программу, вывод будет следующим:

Пример 6: вывод текущего года, месяца и дня.

Мы легко можем получить год, месяц, день, день недели и т. д. из объекта date . Вот как это делается:

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

Класс datetime.time

Экземпляр класса time представляет собой время (часы, минуты, секунды и микросекунды).

Пример 7: объект time для представления времени.

Когда вы запустите программу, вывод будет следующим:

Пример 8: вывод часов, минут, секунд и микросекунд.

После того как вы создадите объект time , вы можете легко получить его атрибуты, такие как часы, минуты и т. д.

Когда вы запустите программу, вывод будет следующим:

Обратите внимание, что мы не передали аргумент microsecond . Следовательно, его значение по умолчанию будет равно 0.

Класс datetime.datetime

Экземпляр класса datetime содержит информацию как о дате, так и о времени.

Пример 9: объект datetime.

Когда вы запустите программу, вывод будет следующим:

Первые три аргумента year , month и day в конструкторе datetime() являются обязательными. Отсутствующие данные будут заполнены нулями по умолчанию.

Пример 10: вывод года, месяца, часа, минуты и метки времени.

Когда вы запустите программу, вывод будет следующим:

Пример 11: получение текущего момента времени.

Мы можем получить информацию о текущем моменте времени не только с помощью уже упомянутого метода now() , но и с помощью today() .

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

Класс datetime.timedelta

Объект timedelta представляет разницу между двумя моментами времени.

Пример 12: разница между двумя моментами времени.

Когда вы запустите программу, вывод будет следующим:

Обратите внимание, что и t3 , и t6 имеют тип .

Пример 13: разница между двумя объектами timedelta.

Когда вы запустите программу, вывод будет следующим:

Здесь мы создали два объекта timedelta — t1 и t2 , и их разница выводится на экран.

Пример 14: отрицательный объект timedelta.

Когда вы запустите программу, вывод будет следующим:

Пример 15: интервал времени в секундах.

Вы можете получить общее количество секунд объекта timedelta , используя метод total_seconds() .

Когда вы запустите программу, вывод будет следующим:

total seconds = 435633.233423

Вы также можете найти сумму двух моментов времени, используя оператор + . Кроме того, вы можете умножить и разделить объект timedelta на целые числа и числа с плавающей точкой.

Больше информации о timedelta вы можете найти в документации.

Формат datetime

Представление даты и времени может отличатся в разных странах, организациях и т. д. В США, например, чаще всего используется формат «мм/дд/гггг», тогда как в Великобритании более распространен формат «дд/мм/гггг».

В Python для работы с форматами есть методы strftime() и strptime() .

Python strftime() — преобразование объекта datetime в строку

Метод strftime() определен в классах date , datetime и time . Он создает форматированную строку из заданного объекта date , datetime или time .

Пример 16: форматирование даты с использованием метода strftime().

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

Здесь %Y , %m , %d , %H и т. д. — коды для определения формата. Метод strftime() принимает один или несколько кодов и возвращает отформатированную строку на его основе.

В приведенной выше программе переменные t , s1 и s2 являются строками.

Основные коды для определения формата:

  • %Y — год [0001, …, 2018, 2019, …, 9999]
  • %m — месяц [01, 02, …, 11, 12]
  • %d — день [01, 02, …, 30, 31]
  • %H — час [00, 01, …, 22, 23]
  • %M — минута [00, 01, …, 58, 59]
  • %S — секунда [00, 01, …, 58, 59]

Чтобы узнать больше о методе strftime() и кодах форматирования, перейдите по ссылке.

Python strptime()- преобразование строки в объект datetime

Метод strptime() создает объект datetime из заданной строки (представляющей дату и время).

Пример 17: метод strptime().

Когда вы запустите программу, вывод будет следующим:

date_string = 21 June, 2018

date_object = 2018-06-21 00:00:00

Метод strptime() принимает два аргумента:

  1. строка, представляющая дату и время.
  2. формат, определяющий, каким образом части даты и времени расположены в переданной строке.

Кстати, коды %d , %B и %Y используются для обозначения дня, месяца (название месяца в полном виде) и года соответственно.

Перейдите по ссылке чтобы узнать больше о методе strptime() .

Обработка часового пояса в Python

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

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

Здесь datetime_NY и datetime_London — это объекты datetime , содержащие текущую дату и время соответствующего часового пояса.

Источник статьи: http://pythonist.ru/rabota-s-datoj-i-vremenem-modul-datetime/

Метод strptime() и strftime() в Python: инструкция и примеры

Для работы с датой и времен в Python предназначен модуль datetime . Этот модуль позволяет всячески манипулировать с временными величинами, что весьма полезно в скриптах, ориентированных на использование в реальном времени. С помощью этого модуля можно считать текущее время на устройстве, узнать разницу между разными моментами времени или, наоборот, прибавить к текущему времени некоторый временной отрезок и запустить счетчик на сайте с отсчетом до какого-нибудь события.

Одна из проблем, связанных с любыми датами и временем — это его формат. В Америке распространен формат MM-DD-YYYY: сначала идет месяц, потом день и в конце располагается год. Для русскоязычных стран более привычным является формат DD-MM-YYYY. Помимо них существуют иные записи даты и времени. Иногда в скриптах возникает необходимость считывать и выводить данные формата datetime , то есть дату. Чтобы сделать этот процесс более комфортным, разработчики придумали два метода для преобразования строк в формат datetime и обратно — strptime() и strftime() .

В рамках этого материала мы разберем работу этих методов в Python и практику их применения.

Метод strptime()

Метод класса datetime strptime() принимает в качестве одного из аргументов строку и создает на основе её объект типа datetime. Метод имеет следующий синтаксис:

datetime.strptime(string_date, ‘params’) , где

  • string_date — это строка, на основе которой нужно создать объект типа datetime ;
  • params — это коды форматы. Их мы рассмотрим в разделе «Список кодов формата». В целом, они передают методу информацию о том, какой формат имеет дата в строке: 10.11.2022, 11.10.2022 или 10 ноябрь 2022.

Для примера возьмем несколько случайных дат с разным форматом и создадим на их основе новые объекты.

Рассмотрим работу datetime strptime в Python 3 на примерах :

Как видим, в строке дата может принимать различные форматы. Шаблон, по которому на основе этой строки будет создан новый объект, описывается с помощью кодов формата и пунктуационных знаков, соответствующих этой строке. Разберемся подробнее в принципе их работы.

В первой строке из примера дата имеет формат DD.MM.YYYY. Чтобы передать информацию об этом в метод мы используем следующие обозначения:

  • %d — день месяца в виде десятичного числа;
  • %m — номер месяца;
  • %Y — год с указанием века;

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

Метод strftime()

Метод strftime() преобразует объект типа datetime в строку. Метод имеет следующий синтаксис:

  • object — объект типа datetime , который необходимо преобразовать в строку;
  • params — форматы кода, на основании которых необходимо сформировать строку;

Рассмотрим несколько практических примеров, как это работает на практике:

Список кодов формата

В этом разделе размещено описание всех кодов формата.

%a

Сокращенная форма дня недели. Например, Пт или Fri для пятницы в русской и английской локализации.

%A

Полная форма дня недели. Например, Пятница или Friday для пятницы в русской и английской локализации.

%b

Сокращенная форма месяца. Например, Ноя и Nov для ноября в русской и английской локализации.

%B

Полная форма месяца. Например, Ноябрь или November для ноября в русской и английской локализации.

%c

Код следующего шаблона: (сокращенный день недели) (сокращенное название месяца) (день месяца) (часы:минуты:секунды) (год).

%d

%H

Часы в 24-часовом формате от 0 до 23.

%I

Часы в 12-часовом формате от 1 до 12.

%j

Порядковый номер дня в году от 1 до 366.

%m

%M

%p

Код используется вместе с 12-часовым форматом для обозначения времени до полудня и после.

%S

%U

Порядковый номер недели в году от 0 до 52. Нулевая неделя начинается с воскресенья.

%w

Порядковый номер дня недели. Воскресенье — 0, суббота — 6.

%W

Порядковый номер недели в году. Нулевая неделя начинается с понедельника, а не с воскресенья, как в %U .

%x

%X

%y

%Y

%Z

Временная зона, при наличии.

%%

Работа с локальными обозначениями

Для работы с локальными обозначениями, например Декабрь вместо December, можно использовать библиотеку locale:

При использовании этой библиотеки для русскоязычных обозначений важно помнить, что библиотека locale не обрабатывает склонения месяцев и дней. Любые названия должны быть в именительном падеже.

Источник статьи: http://timeweb.cloud/docs/python/metod-strptime-i-strftime-v-python

Как использовать модуль datetime в Python

Datetime — важный элемент любой программы, написанной на Python. Этот модуль позволяет управлять датами и временем, представляя их в таком виде, в котором пользователи смогут их понимать.

datetime включает различные компоненты. Так, он состоит из объектов следующих типов:

  • date — хранит дату
  • time — хранит время
  • datetime — хранит дату и время

Как получить текущие дату и время?

С помощью модуля Python это сделать очень просто. Сначала нужно импортировать класс datetime из модуля datetime , после чего создать объект datetime . Модуль предоставляет метод now() , который возвращает текущие дату и время с учетом локальных настроек.

Получить текущую дату в Python

Класс date можно использовать для получения или изменения объектов даты. Например, для получения текущей с учетом настроек подойдет следующее:

Текущая дата — 2020-11-14 в формате год-месяц-день соответственно.

Получить текущее время

Для получения текущего локального времени сперва нужно получить текущие дату и время, а затем достать из этого объекта только время с помощью метода time() :

Компоненты datetime в Python

Модуль datetime в Python может использоваться для получения разных версий времени. Для этого нужно ознакомиться с атрибутами модуля. Используем для этого функцию dir() .

В этом руководстве речь пойдет о следующих элементах:

  • date — объекты даты
  • datetime — объекты даты и времени
  • time — объекты времени
  • timedelta — этот атрибут покрывает интервалы и используется для определения прошлых или будущих событий
  • Tzinfo — этот атрибут отвечает за часовые пояса

Как создавать объекты даты и времени

Для создания объекта времени используется класс time из модуля datetime в Python. Синтаксис следующий: datetime.time(hour, minutes, seconds) .

В этом примере создается объект времени представленный следующим образом (8, 48, 45).

Сначала импортируется модуль datetime . После этого создается экземпляр класса (объект time ). Затем ему присваивается значение datetime.time(8, 48, 45) , где параметры 8, 48 и 45 представляют собой часы, минуты и секунды соответственно.

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

Вернет вот такой результат:

Timedelta

timedelta представляет длительность (даты или времени). Модуль datetime включает атрибут timedelta() , который используется для управления датой в Python. Объект timedelta выглядит следующим образом:

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

Как вычислить разницу для двух дат

Посмотрим на несколько примеров вычисления разницы во времени. Предположим, есть два объекта datetime :

Для получения разницы нужно лишь вычесть значение одного объекта из второго:

Таким образом между 2 и 30 октября 2020 года 28 дней.

Как вычислить разницу двух объектов datetime.time

С помощью timedelta нельзя выполнять манипуляции над объектами time . Например:

Такой код вернет следующую ошибку:

Как получать прошлые и будущие даты с помощью timedelta

Поскольку timedelta — это длительность, то для получения прошлой или будущей даты нужно добавить объект timedelta к существующему или вычесть из него же. Вот пример нескольких уравнений, где n — это целое число, представляющее количество дней:

Если нужно, например, получить дату за прошлые две недели, то достаточно вычесть 14 дней из текущей даты:

Предположим, вы задумали практиковать определенный навык в течение 21 дня. Для получения будущей даты нужно добавить 21 день к текущей дате:

Другие арифметические операции с timedelta

Значения даты и времени могут сравниваться для определения того, какая из них была раньше или позже. Например:

Часовые пояса

Пока что мы работали с datetime без учета часовых поясов и летнего времени. Но прежде чем переходить к следующим пунктам, нужно разобраться с разницей в абсолютных (naive) и относительных (aware) датах.

Абсолютные даты не содержат информацию, которая бы могла определить часовой пояс или летнее время. Однако с такими намного проще работать.

Относительные же содержат достаточно информации для определения часового пояса или отслеживания изменений из-за летнего времени.

Разница между DST, GMT и UTC

  1. GMT
    Официальный часовой пояс, используемый в некоторых странах Европы и Африки. Он может быть представлен как в 24, так и в 12-часовом форматах. GMT используется для того, чтобы задавать местное время. Например, местное время для Берлина 2020–10–17 09:40:33.614581+02:00 GMT. Для Найроби же это — 2020–10–17 10:40:33.592608+03:00 GMT.
  2. DST (летнее время)
    Страны, которые переходят на летнее время, делают это для того, чтобы дневное время длилось как можно дольше. Во время летнего времени они переводят стрелки своих часов на час вперед и возвращаются обратно осенью.
  3. UTC (всемирное координированное время)
    Временной стандарт для часовых поясов во всем мире. Он позволяет синхронизировать время во всем мире и служит отправной точкой для остальных.

Как работать с часовыми поясами

Рассмотрим, как создать простой относительный объект datetime :

Эта программа возвращает объект с абсолютным значением datetime . Если же нужно сделать его абсолютным, то нужно явно указать часовой пояс. Как это сделать? В библиотеке datetime в Python нет модуля для работы с часовыми поясами. Для этого нужно использовать другие библиотеки. Одна из таких — pytz.

Предположим, нужно получить текущее время для Найроби. Для этого нужно использовать конкретный часовой пояс. Для начала можно с помощью pytz получить все существующие часовые пояса.

Для получения времени в Найроби:

А вот так можно получить время Берлина:

Здесь можно увидеть разницу в часовых поясах разных городов, хотя сама дата одна и та же.

Конвертация часовых поясов

При конвертации часовых поясов в первую очередь нужно помнить о том, что все атрибуты представлены в UTC. Допустим, нужно конвертировать это значение в America/New_York :

Другие практические примеры

Всегда храните даты в UTC. Вот примеры:

Результат для этого кода — 2020-11-14 14:38:46.462397+00:00 , хотя локальное время может быть, например, таким 2020-11-14 16:38:46.462397+00:00 . А уже при демонстрации даты пользователю стоит использовать метод localize с местными настройками:

Вернет текущее локальное время — 2020-11-14 16:42:38.228528+00:00 .

Как конвертировать строки в datetime

strptime() в Python — это метод из модуля datetime. Вот его синтаксис:

Аргументы формата необязательные и являются строками. Предположим, нужно извлечь текущие дату и время:

Источник статьи: http://pythonru.com/primery/kak-ispolzovat-modul-datetime-v-python

Преобразование строки в datetime в Python

Одна из многих распространенных проблем, с которыми мы сталкиваемся при разработке программного обеспечения, – это обработка даты и времени. Например, после получения строки даты и времени из API нам необходимо преобразовать ее в удобочитаемый формат.

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

К счастью, Python поставляется со встроенным модулем datetime для работы с датой и временем. Как вы, наверное, догадались, в нем есть различные функции для управления датой и временем. Используя этот модуль, мы можем легко проанализировать любую строку даты и времени, и преобразовать ее в объект datetime.

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

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

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

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

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

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

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

В этом примере мы используем новый метод под названием 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. Приведу еще один нетривиальный пример:

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

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

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

Работа с часовыми поясами

При работе с часовыми поясами обработка даты и времени становится более сложной. Все вышеупомянутые примеры, которые мы обсуждали, являются наивными объектами datetime, то есть эти объекты не содержат данных, связанных с часовым поясом. У объекта datetime есть одна переменная, которая содержит информацию о часовом поясе, tzinfo.

Вывод tzinfo – None, поскольку это объект datetime. Для преобразования часового пояса для Python доступна библиотека pytz. Теперь давайте воспользуемся библиотекой, чтобы преобразовать указанную выше метку времени в UTC.

+00: 00 – разница между отображаемым временем и временем UTC. В этом примере значение tzinfo также совпадает с UTC, отсюда смещение 00:00. В этом случае объект datetime является объектом с учетом часового пояса.

Точно так же мы можем преобразовать строки даты и времени в любой другой часовой пояс. Например, мы можем преобразовать строку «2018-06-29 17: 08: 00.586525 + 00: 00» в часовой пояс «America / New_York», как показано ниже:

Сначала мы преобразовали строку в объект datetime, date_time_obj. Затем мы преобразовали его в объект datetime с включенным часовым поясом, timezone_date_time_obj. Поскольку мы установили часовой пояс, как «America и New_York», время вывода показывает, что он на 4 часа отстает от времени UTC. Вы можете проверить эту страницу Википедии, чтобы найти полный список доступных часовых поясов.

Преобразование часовых поясов

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

Сначала мы создали один объект datetime с текущим временем и установили его как часовой пояс «America и New_York». Затем, используя метод astimezone(), мы преобразовали это datetime в часовой пояс «Европа и Лондон». Обе даты будут печатать разные значения, например:

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

Использование сторонних библиотек

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

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

Давайте рассмотрим некоторые из этих библиотек в следующих разделах.

dateutil

Модуль dateutil является расширением модуля datetime. Одно из преимуществ состоит в том, что нам не нужно передавать код синтаксического анализа. Например:

Эта функция синтаксического анализа автоматически проанализирует строку и сохранит ее в переменной datetime. Парсинг выполняется автоматически. Вам не нужно указывать какую-либо строку формата. Попробуем разобрать разные типы строк с помощью dateutil:

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

Хотя это удобно, вспомните из предыдущего, что необходимость предсказывать формат делает код намного медленнее, поэтому, если ваш код требует высокой производительности, это может быть неправильным подходом для вашего приложения.

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

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

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

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

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

Arrow

Arrow – еще одна библиотека для работы с datetime в Python. И, как и раньше с Maya, он также автоматически определяет формат даты и времени. После интерпретации он возвращает объект даты и времени в Python из объекта стрелки.

Давайте попробуем это с той же примерной строкой, которую мы использовали для Maya:

А вот как можно использовать стрелку для преобразования часовых поясов с помощью метода to:

Как видите, строка даты и времени преобразована в регион “Америка и Нью-Йорк”.

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

Этот код завершится ошибкой для закомментированных строк даты и времени, что составляет более половины наших примеров. Результатом для других строк будет:

Чтобы правильно проанализировать строки даты и времени, вам необходимо передать соответствующие токены формата, чтобы дать библиотеке подсказки относительно того, как их анализировать. Например, «MMM» для названия месяцев, например «Jan, Feb, Mar» и т.д. вы можете проверить это руководство для всех доступных токенов.

Заключение

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

Основная проблема с пакетом datetime по умолчанию заключается в том, что нам нужно вручную указать код синтаксического анализа почти для всех форматов строк даты и времени. Итак, если ваш строковый формат изменится в будущем, вам, вероятно, также придется изменить свой код. Но многие сторонние библиотеки, такие как упомянутые здесь, обрабатывают это автоматически.

Еще одна проблема, с которой мы сталкиваемся, – это часовые пояса. Лучший способ справиться с ними – всегда сохранять время в базе данных в формате UTC, а затем при необходимости преобразовывать его в местный часовой пояс пользователя.

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

Источник статьи: http://tonais.ru/string/preobrazovanie-stroki-v-datetime-python

Convert Python String to Date: Python’s strptime Function

In this post, you’ll learn how to convert a Python string to a date, using the datetime module’s .strptime() method. Specifically, you’ll learn how to convert a string to a date and how to convert a Pandas column to datetime with this approach.

Working with dates, times, and timezones is a problem often faced in software development. The dates and times you receive back may not always be in a datetime format. It then becomes important to convert them.

The Quick Answer: Use Datetime’s strptime function

Python Datetime Strptime: What is it?

Python’s datetime module comes built into your Python installation, meaning you don’t need to worry about installing it.

The datetime module comes with three main object types: date , time , and datetime . They can be considered self-explanatory, but just in case: date deals with dates, time deals with times, and datetime deals with both dates and times.

One of the very helpful methods that we can use within the datetime module is the strptime method that allows us to convert a string to a date (or in our case, a datetime ).

The method looks like this:

  • The date_string is the string that holds what we want to convert.
  • the format contains the format of the string. Learn more about it in the section on format code examples below.

How to use strptime to convert python string to date

How do you convert Python String to Date?

In order to convert a Python string to a date (or datetime), we can use the datetime .strptime() method.

Let’s see how we can do this:

  1. We import the datetime object from the datetime module
  2. We pass the string into the .strptime() method, as well as its format
  3. We assign this to a new variable and print it out

At first glance, these format codes may look a little funny. You’ll learn all about some different examples in the next section.

What are Datetime’s Format Codes?

The datetime module uses a specific format codes in order to convert a string to a datetime or a datetime to a string. In the list below, you’ll learn a number of the most important format codes that you’ll encounter:

  • %a : Weekday in the locale’s abbreviated name (e.g., Mon)
  • %A : Weekday in the locale’s full name (e.g., Monday)
  • %b : month as locale’s abbreviated name (e.g., Dec)
  • %B : month as locale’s full name (e.g., December)
  • %m : month as zero-padded decimal number (e.g., 01)
  • %d : day as a zero-padded decimal number (e.g., 09)
  • % Y: year with century (e.g., 2021)
  • % y: year without century (e.g., 21)

For example, if you’re given a string that looks like this: ‘Monday June 3, 2021’ , you’d write ‘%A %B %d, %Y’

The important thing to know here is that characters like commas or colons need to be included as well. This may feel a bit unnatural but think of the format codes as placeholders.

To see the rest of the format codes, check out the official documentation here.

Convert a Pandas column to datetime with strptime

Pandas has a very helpful built-in tool called .to_datetime() to convert a column to, well, datetime. You can learn about it in details in this post here.

Let’s load this dataframe and see what it looks like:

Now, let’s use the method to convert the Hire Date column to datetime:

However, if you wanted to use the datetime .strptime method, you could apply the function to the entire column. Keep in mind, this isn’t efficient and the Pandas .to_datetime() method is much more efficient. Learn a bit more about the Pandas .apply() method in my post here.

Conclusion

In this post, you learned how to convert a Python string to date or datetime. You learned how the datetime strptime function works, what datetime format codes are, as well as how to handle string to date conversion in Pandas.

To learn more about the datetime strptime function, check out the official documentation here.

Источник статьи: http://datagy.io/python-string-to-date/

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

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