Работа с датой и временем: модуль datetime
Содержание:
- Computing time differences:
- The calendar Module
- Класс datetime.date
- Модуль datetime
- 4 ответа
- Точность
- Форматирование и перевод в строку
- Установка отдельных компонентов даты и времени
- Python format datetime
- Преобразование строк в даты
- Python Tutorial
- Summary
- time.time
- Бенчмаркинг
- Работа с часовыми поясами
- Basic datetime objects usage:
- Python TimeDelta Операции
- Parsing a string into a timezone aware datetime object:
- Преобразование часовых поясов
- Класс datetime.datetime
- Python TimeDelta
- time.ctime
- Creation
- Форматирование и вывод дат
Computing time differences:
The timedelta module is used to compute differences between times:
from datetime import datetime, timedelta now = datetime.now() then = datetime(2019, 5, 23) print(then)
Output:
2019-05-23 00:00:00
Specifying time is optional when creating a new datetime object
from datetime import datetime, timedelta now = datetime.now() then = datetime(2019, 5, 23) delta = now-then print(delta)
Output:
162 days, 9:10:42.599772
delta is of type timedelta:
from datetime import datetime, timedelta now = datetime.now() then = datetime(2019, 5, 23) delta = now-then print(delta.days) # 60 print(delta.seconds) # 40826
Output:
162 33296
To get n day’s after and n day’s before date we could use:
The calendar Module
The calendar module supplies calendar-related functions, including functions to print a text calendar for a given month or year.
By default, calendar takes Monday as the first day of the week and Sunday as the last one. To change this, call calendar.setfirstweekday() function.
Here is a list of functions available with the calendar module −
Sr.No. | Function with Description |
---|---|
1 |
calendar.calendar(year,w=2,l=1,c=6) Returns a multiline string with a calendar for year year formatted into three columns separated by c spaces. w is the width in characters of each date; each line has length 21*w+18+2*c. l is the number of lines for each week. |
2 |
calendar.firstweekday( ) Returns the current setting for the weekday that starts each week. By default, when calendar is first imported, this is 0, meaning Monday. |
3 |
calendar.isleap(year) Returns True if year is a leap year; otherwise, False. |
4 |
calendar.leapdays(y1,y2) Returns the total number of leap days in the years within range(y1,y2). |
5 |
calendar.month(year,month,w=2,l=1) Returns a multiline string with a calendar for month month of year year, one line per week plus two header lines. w is the width in characters of each date; each line has length 7*w+6. l is the number of lines for each week. |
6 |
calendar.monthcalendar(year,month) Returns a list of lists of ints. Each sublist denotes a week. Days outside month month of year year are set to 0; days within the month are set to their day-of-month, 1 and up. |
7 |
calendar.monthrange(year,month) Returns two integers. The first one is the code of the weekday for the first day of the month month in year year; the second one is the number of days in the month. Weekday codes are 0 (Monday) to 6 (Sunday); month numbers are 1 to 12. |
8 |
calendar.prcal(year,w=2,l=1,c=6) Like print calendar.calendar(year,w,l,c). |
9 |
calendar.prmonth(year,month,w=2,l=1) Like print calendar.month(year,month,w,l). |
10 |
calendar.setfirstweekday(weekday) Sets the first day of each week to weekday code weekday. Weekday codes are 0 (Monday) to 6 (Sunday). |
11 |
calendar.timegm(tupletime) The inverse of time.gmtime: accepts a time instant in time-tuple form and returns the same instant as a floating-point number of seconds since the epoch. |
12 |
calendar.weekday(year,month,day) Returns the weekday code for the given date. Weekday codes are 0 (Monday) to 6 (Sunday); month numbers are 1 (January) to 12 (December). |
Класс datetime.date
Объект представляет дату (год, месяц и день).
Пример 3: объект date для представления даты.
import datetime d = datetime.date(2020, 6, 29) print(d)
Когда вы запустите программу, вывод будет следующим:
В приведенном выше примере является конструктором класса . Конструктор принимает три аргумента: год, месяц и день.
Переменная — это объект .
Вы можете создавать объекты класса , предварительно импортировав модуль datetime, а можете импортировать только класс из модуля datetime. Вот как это делается:
from datetime import date a = date(2020, 6, 29) print(a) # 2020-06-29
Пример 4: Получение текущей даты.
Для получения информации о текущей дате можно воспользоваться методом .
from datetime import date today = date.today() print("Current date =", today)
Когда вы запустите программу, вывод будет следующим:
Пример 5: получение даты из метки времени (timestamp).
Мы также можем создавать объекты из метки времени (timestamp). Термин timestamp употребляется для обозначения POSIX-времени — количества секунд, прошедшего с 00:00:00 UTC 1 января, 1970 года. Вы можете преобразовать метку времени в дату при помощи метода .
from datetime import date timestamp = date.fromtimestamp(1326244364) print("Date =", timestamp)
Когда вы запустите программу, вывод будет следующим:
Пример 6: вывод текущего года, месяца и дня.
Мы легко можем получить год, месяц, день, день недели и т. д. из объекта . Вот как это делается:
from datetime import date today = date.today() print("Current year:", today.year) print("Current month:", today.month) print("Current day:", today.day)
Когда вы запустите программу, результат будет примерно таким:
Модуль datetime
Модуль datetime в Python, как вы, наверное, догадались, содержит методы, которые можно использовать для работы со значениями даты и времени. Чтобы использовать этот модуль, мы сначала импортируем его с помощью оператора импорта следующим образом:
import datetime
Мы можем представить значения времени с помощью класса time. Атрибуты для класса времени включают час, минуту, секунду и микросекунду.
Аргументы для класса времени необязательны. Хотя, если вы не укажете какой-либо аргумент, вы вернетесь к времени 0, что вряд ли будет тем, что вам нужно большую часть времени.
Например, чтобы инициализировать объект времени со значением 1 час, 10 минут, 20 секунд и 13 микросекунд, мы можем выполнить следующую команду:
t = datetime.time(1, 10, 20, 13)
Чтобы посмотреть время, воспользуемся функцией print:
print(t)
Вывод:
01:10:20.000013
Возможно, вам понадобится увидеть только час, минуту, секунду или микросекунду, вот как вы можете это сделать:
print('hour:', t.hour)
Вывод:
hour: 1
Минуты, секунды и микросекунды для указанного выше времени можно получить следующим образом:
print('Minutes:', t.minute) print('Seconds:', t.second) print('Microsecond:', t.microsecond)
Вывод:
Minutes: 10 Seconds: 20 Microseconds: 13
Значения календарной даты могут быть представлены через класс date. У экземпляров будут атрибуты года, месяца и дня.
Давайте вызовем метод today, чтобы увидеть сегодняшнюю дату:
import datetime today = datetime.date.today() print(today)
Вывод:
2018-09-15
Код вернет дату на сегодня, поэтому вывод, который вы увидите, будет зависеть от дня, когда вы запускаете вышеуказанный скрипт.
Теперь вызовем метод ctime, чтобы распечатать дату в другом формате:
print('ctime:', today.ctime())
Вывод:
ctime: Sat Sep 15 00:00:00 2018
Метод ctime использует более длинный формат даты и времени, чем в примерах, которые мы видели ранее. Этот метод в основном используется для преобразования времени Unix (количество секунд с 1 января 1970 г.) в строковый формат.
А вот как мы можем отобразить год, месяц и день, используя класс date:
print('Year:', today.year) print('Month:', today.month) print('Day :', today.day)
Вывод:
Year: 2018 Month: 9 Day : 15
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
Форматирование и перевод в строку
Для получение части даты или времени можно использовать следующие атрибуты:
- year
- month
- day
- weekday
- hour
- minute
- second
Так же есть метод strftime, который форматирует даты в нужном формате в строку. Например так мы получим дату в формате, который используется у нас:
Где:
- %d — день месяца с 1 по 31;
- %m — месяц с 1 по 12;
- %Y — год;
- %H — час в формате 0-24;
- %M — минуты;
- %S — секунды.
Таким же способом можно получить время и дату:
- %c — время и дата;
- %x — дата;
- %X — время.
Обратите внимание, что таким способом мы преобразуем объект класса datetime в строку и мы больше не сможем использовать методы по работе с датой (например сравнение):
Мы получим ошибку так как уже работаем со строкой:
AttributeError: ‘str’ object has no attribute ‘day’
Выше описаны основные возможности форматирования используя метод strftime(), но их, конечно, больше.
Получения дня недели и название месяца
Можно получить название дня недели или название. Численный вариант эквивалентен следующим значениям:
- 0 — Monday (Понедельник);
- 1 — Tuesday (Вторник);
- 2 — Wednesday (Среда);
- 3 — Thursday (Четверг);
- 4 — Friday (Пятница);
- 5 — Saturday (Суббота);
- 6 — Sunday (Воскресенье).
Следующий пример вернет день недели в виде числа:
Или получить название:
Где:
- %A — полное название дня недели;
- %a — сокращенное название дня недели;
- %s — представление в виде числа.
Такой же принцип по работе с месяцами, где:
- %B — полное название месяца;
- %b — сокращенное название месяца;
- %m — месяц в виде числа.
Установка отдельных компонентов даты и времени
В JavaScript установить отдельные компоненты даты и времени можно с помощью следующих методов объекта :
- – установка года (дополнительно можно задать ещё месяц и число);
- – установка месяца от 0 до 11 (0 – январь, 1 – февраль, 2 – март, …, 11 – декабрь); дополнительно этот метод позволяет ещё установить число;
- – установка числа;
- – устанавливает час от 0 до 23 (дополнительно можно ещё установить минуты, секунды и миллисекунды);
- – устаналивает минуты от 0 до 59 (дополнительно можно установить ещё секунды и миллисекунды);
- – устанавливает секунды от 0 до 59 (дополнительно можно установить ещё миллисекунды);
- – устанавливает миллисекунды (от 0 до 999).
Все эти методы предназначены для установки даты и времени в часовом поясе, установленном на компьютере пользователя.
// создадим экземпляр объекта Date, содержащий текущую дату var newDate = new Date(); // установим год newDate.setFullYear(2019); // установим год и месяц newDate.setFullYear(2019, 08); // установим 20.09.2019 newDate.setFullYear(2019, 08, 20); // установим месяц newDate.setMonth(05); // установим месяц и число newDate.setMonth(05, 15); // установим число newDate.setDate(28); // установим час newDate.setHours(13); //установим час и минуты newDate.setHours(13,20);
В JavaScript установка даты и времени в часовом поясе UTC+0 осуществляется с помощью следующих методов: , , , , , , .
Установка даты и времени с помощью количества миллисекунд, прошедших с 01.01.1970 00:00:00 UTC осуществляется с помощью и тогда .
Кроме этого, в JavaScript указание некорректных компонентов даты и времени не приводит к ошибкам, они просто автоматически распределятся по остальным.
Например:
// число 44 распределится следующим образом: 44 - 31 = 13, 13 февраля 2019 newDate.setFullYear(2019, 01, 44);
Этот приём можно использовать когда вам нужно получить дату, отличающуюся от данной на определённый промежуток времени.
Примеры:
// дата, которая будет больше newDate на 7 дней newDate.setDate(date1.getDate() + 7); // дата, которая будет меньше newDate на 120 секунд newDate.setSeconds(date1.getSeconds()-120); // так можно установить последнее число предыдущего месяца для newDate newDate.setDate(0);
Python format datetime
The way date and time is represented may be different in different places, organizations etc. It’s more common to use in the US, whereas is more common in the UK.
Python has and methods to handle this.
Example 15: Format date using strftime()
When you run the program, the output will be something like:
time: 04:34:52 s1: 12/26/2018, 04:34:52 s2: 26/12/2018, 04:34:52
Here, , , , etc. are format codes. The method takes one or more format codes and returns a formatted string based on it.
In the above program, t, s1 and s2 are strings.
- — year
- — month
- — day
- — hour [00, 01, …, 22, 23
- — minute
- — second
To learn more about and format codes, visit: Python strftime().
Example 16: strptime()
When you run the program, the output will be:
date_string = 21 June, 2018 date_object = 2018-06-21 00:00:00
The method takes two arguments:
- a string representing date and time
- format code equivalent to the first argument
By the way, , and format codes are used for day, month(full name) and year respectively.
Visit Python strptime() to learn more.
Преобразование строк в даты
Метод strftime помог нам преобразовать объекты даты в более читаемые строки. Метод делает противоположное, то есть принимает строки и преобразует их в объекты даты, понятные Python.
Вот синтаксис метода:
datetime.strptime(string, format)
Строковый параметр – это значение в строковом формате, которое мы хотим преобразовать в формат даты. Параметр формата – это директива, определяющая формат, который должен быть принят датой после преобразования.
Например, предположим, что нам нужно преобразовать строку «9/15/18» в объект datetime.
Сначала импортируем модуль datetime. Мы будем использовать ключевое слово from, чтобы иметь возможность ссылаться на определенные функции модуля без формата точки:
from datetime import datetime
Затем мы можем определить дату в виде строки:
str = '9/15/18'
Python не сможет понять указанную выше строку как datetime, пока мы не преобразуем ее в фактический объект datetime. Мы можем успешно сделать это, вызвав метод strptime.
Выполните следующую команду, чтобы преобразовать строку:
date_object = datetime.strptime(str, '%m/%d/%y')
Теперь вызовем функцию печати, чтобы отобразить строку в формате datetime:
print(date_object)
Вывод:
2018-09-15 00:00:00
Как видите, конвертация прошла успешно!
Вы можете видеть, что косая черта «/» использовалась для разделения различных элементов строки. Это сообщает методу strptime, в каком формате находится наша дата, в нашем случае «/» используется в качестве разделителя.
Но что, если день/месяц/год были разделены знаком «-»? Вот как вы с этим справитесь:
from datetime import datetime str = '9-15-18' date_object = datetime.strptime(str, '%m-%d-%y') print(date_object)
Вывод:
2018-09-15 00:00:00
И снова, благодаря спецификатору формата, метод strptime смог проанализировать нашу дату и преобразовать ее в объект даты.
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
Summary
- Date and time in JavaScript are represented with the Date object. We can’t create “only date” or “only time”: objects always carry both.
- Months are counted from zero (yes, January is a zero month).
- Days of week in are also counted from zero (that’s Sunday).
- auto-corrects itself when out-of-range components are set. Good for adding/subtracting days/months/hours.
- Dates can be subtracted, giving their difference in milliseconds. That’s because a becomes the timestamp when converted to a number.
- Use to get the current timestamp fast.
Note that unlike many other systems, timestamps in JavaScript are in milliseconds, not in seconds.
Sometimes we need more precise time measurements. JavaScript itself does not have a way to measure time in microseconds (1 millionth of a second), but most environments provide it. For instance, browser has performance.now() that gives the number of milliseconds from the start of page loading with microsecond precision (3 digits after the point):
Node.js has module and other ways. Technically, almost any device and environment allows to get more precision, it’s just not in .
time.time
Функция time.time отображает время в секундах, начиная с эпохи, как число с плавающей запятой. Давайте взглянем:
Python
import time
x = time.time()
print(x) # 1491340367.478385
1 2 3 4 |
importtime x=time.time() print(x)# 1491340367.478385 |
Весьма просто. Вы можете использовать данную функцию, когда вам нужно сохранить настоящее время в базу данных, но вам не нужно конвертировать его в метод datetime вашей базы данных. Вы можете вспомнить о том, что метод ctime принимает время в секундах, так что мы можем использовать time.time для получения количества секунд для передачи их ctime, вот так:
Python
import time
a = time.ctime(time.time())
print(a) # Wed Apr 5 00:13:47 2017
1 2 3 4 |
importtime a=time.ctime(time.time()) print(a)# Wed Apr 5 00:13:47 2017 |
Если вы обратитесь к документации, чтобы узнать больше о модуле time, или если вы хотите немного поэкспериментировать, вы найдете несколько способов использования данной функции.
Бенчмаркинг
Будьте внимательны, если хотите точно протестировать производительность функции, которая зависит от процессора.
Например, сравним две функции, вычисляющие разницу между двумя датами: какая сработает быстрее?
Подобные вычисления, замеряющие производительность, также называют «бенчмарками» (benchmark).
Обе функции делают буквально одно и то же, только одна использует явный метод для получения даты в миллисекундах, а другая полагается на преобразование даты в число. Результат их работы всегда один и тот же.
Но какая функция быстрее?
Для начала можно запустить их много раз подряд и засечь разницу. В нашем случае функции очень простые, так что потребуется хотя бы 100000 повторений.
Проведём измерения:
Вот это да! Метод работает ощутимо быстрее! Всё потому, что не производится преобразование типов, и интерпретаторам такое намного легче оптимизировать.
Замечательно, это уже что-то. Но до хорошего бенчмарка нам ещё далеко.
Представьте, что при выполнении процессор параллельно делал что-то ещё, также потребляющее ресурсы. А к началу выполнения он это уже завершил.
Достаточно реалистичный сценарий в современных многопроцессорных операционных системах.
В итоге у первого бенчмарка окажется меньше ресурсов процессора, чем у второго. Это может исказить результаты.
Для получения наиболее достоверных результатов тестирования производительности весь набор бенчмарков нужно запускать по нескольку раз.
Например, так:
Современные интерпретаторы JavaScript начинают применять продвинутые оптимизации только к «горячему коду», выполняющемуся несколько раз (незачем оптимизировать то, что редко выполняется). Так что в примере выше первые запуски не оптимизированы должным образом. Нелишним будет добавить предварительный запуск для «разогрева»:
Будьте осторожны с микробенчмарками
Современные интерпретаторы JavaScript выполняют множество оптимизаций. Они могут повлиять на результаты «искусственных тестов» по сравнению с «нормальным использованием», особенно если мы тестируем что-то очень маленькое, например, работу оператора или встроенной функции. Поэтому если хотите серьёзно понять производительность, пожалуйста, изучите, как работают интерпретаторы JavaScript. И тогда вам, вероятно, уже не понадобятся микробенчмарки.
Отличный набор статей о V8 можно найти на http://mrale.ph.
Работа с часовыми поясами
При работе с часовыми поясами обработка даты и времени становится более сложной. Все вышеупомянутые примеры, которые мы обсуждали, являются наивными объектами datetime, то есть эти объекты не содержат данных, связанных с часовым поясом. У объекта datetime есть одна переменная, которая содержит информацию о часовом поясе, tzinfo.
import datetime as dt dtime = dt.datetime.now() print(dtime) print(dtime.tzinfo)
Этот код напечатает:
$ python3 datetime-tzinfo-1.py 2018-06-29 22:16:36.132767 None
Вывод tzinfo – None, поскольку это объект datetime. Для преобразования часового пояса для Python доступна библиотека pytz. Теперь давайте воспользуемся библиотекой, чтобы преобразовать указанную выше метку времени в UTC.
import datetime as dt import pytz dtime = dt.datetime.now(pytz.utc) print(dtime) print(dtime.tzinfo)
Вывод:
$ python3 datetime-tzinfo-2.py 2018-06-29 17:08:00.586525+00:00 UTC
+00: 00 – разница между отображаемым временем и временем UTC. В этом примере значение tzinfo также совпадает с UTC, отсюда смещение 00:00. В этом случае объект datetime является объектом с учетом часового пояса.
Точно так же мы можем преобразовать строки даты и времени в любой другой часовой пояс. Например, мы можем преобразовать строку «2018-06-29 17: 08: 00.586525 + 00: 00» в часовой пояс «America / New_York», как показано ниже:
import datetime as dt import pytz date_time_str = '2018-06-29 17:08:00' date_time_obj = dt.datetime.strptime(date_time_str, '%Y-%m-%d %H:%M:%S') timezone = pytz.timezone('America/New_York') timezone_date_time_obj = timezone.localize(date_time_obj) print(timezone_date_time_obj) print(timezone_date_time_obj.tzinfo)
Выход:
$ python3 datetime-tzinfo-3.py 2018-06-29 17:08:00-04:00 America/New_York
Сначала мы преобразовали строку в объект datetime, date_time_obj. Затем мы преобразовали его в объект datetime с включенным часовым поясом, timezone_date_time_obj. Поскольку мы установили часовой пояс, как «America и New_York», время вывода показывает, что он на 4 часа отстает от времени UTC. Вы можете проверить эту страницу Википедии, чтобы найти полный список доступных часовых поясов.
Basic datetime objects usage:
The datetime module contains three primary types of objects — date, time, and datetime.
Date:
import datetime today = datetime.date.today() new_year = datetime.date(2019, 1, 1) print(new_year)
Output:
2019-01-01
Time:
import datetime #Time object noon = datetime.time(12, 0, 0) print(noon)
Output:
12:00:00
Date Time:
import datetime # Current datetime now = datetime.datetime.now() print(now)
Output:
2019-11-01 06:16:18.526734
Date Time:
import datetime # Datetime object millenium_turn = datetime.datetime(2019, 1, 1, 0, 0, 0) print(millenium_turn)
Output:
2019-01-01 00:00:00
Python TimeDelta Операции
Давайте посмотрим на еще несколько операций между объектами TimeDelta.
ct = current_datetime + timedelta(seconds=60) - timedelta(seconds=60) print(current_datetime == ct) ct = current_datetime + timedelta(seconds=10) * 6 print('Current Time:', current_datetime) print('One Min from Current Time:', ct) print('Timedelta absolute value:', abs(timedelta(days=-10))) print('Timedelta String Representation:', str(timedelta(days=1, seconds=30, hours=10, milliseconds=300))) print('Timedelta Object Representation:', repr(timedelta(days=1, seconds=30, hours=10, milliseconds=300)))
Выход:
True Current Time: 2018-09-18 12:47:28.331197 One Min from Current Time: 2018-09-18 12:48:28.331197 Timedelta absolute value: 10 days, 0:00:00 Timedelta String Representation: 1 day, 10:00:30.300000 Timedelta Object Representation: datetime.timedelta(days=1, seconds=36030, microseconds=300000)
Parsing a string into a timezone aware datetime object:
Python 3.2+ has support for %z format when parsing a string into a datetime object.
UTC offset in the form +HHMM or -HHMM (empty string if the object is naive).
import datetime dt = datetime.datetime.strptime("2019-04-15T08:27:18-0500", "%Y-%m-%dT%H:%M:%S%z") print(dt)
Output:
2019-04-15 08:27:18-05:00
Fixed Offset Time Zones
from datetime import datetime, timedelta, timezone JST = timezone(timedelta(hours=+9)) dt = datetime(2019, 1, 1, 12, 0, 0, tzinfo=JST) print(dt) # 2019-01-01 12:00:00+09:00 print(dt.tzname()) # UTC+09:00 dt = datetime(2019, 1, 1, 12, 0, 0, tzinfo=timezone(timedelta(hours=9), 'JST')) print(dt.tzname) # 'JST'
Output:
2019-01-01 12:00:00+09:00 UTC+09:00 <built-in method tzname of datetime.datetime object at 0x7f91a9437360>
Преобразование часовых поясов
Мы можем преобразовать часовой пояс объекта datetime из одного региона в другой, как показано в примере ниже:
import datetime as dt import pytz timezone_nw = pytz.timezone('America/New_York') nw_datetime_obj = dt.datetime.now(timezone_nw) timezone_london = pytz.timezone('Europe/London') london_datetime_obj = nw_datetime_obj.astimezone(timezone_london) print('America/New_York:', nw_datetime_obj) print('Europe/London:', london_datetime_obj)
Сначала мы создали один объект datetime с текущим временем и установили его как часовой пояс «America и New_York». Затем, используя метод astimezone(), мы преобразовали это datetime в часовой пояс «Европа и Лондон». Обе даты будут печатать разные значения, например:
$ python3 datetime-tzinfo-4.py America/New_York: 2018-06-29 22:21:41.349491-04:00 Europe/London: 2018-06-30 03:21:41.349491+01:00
Как и ожидалось, даты и время отличаются, поскольку разница между ними составляет около 5 часов.
Класс datetime.datetime
Экземпляр класса содержит информацию как о дате, так и о времени.
Пример 9: объект datetime.
from datetime import datetime #datetime(year, month, day) a = datetime(2018, 11, 28) print(a) # datetime(year, month, day, hour, minute, second, microsecond) b = datetime(2017, 11, 28, 23, 55, 59, 342380) print(b)
Когда вы запустите программу, вывод будет следующим:
Первые три аргумента , и в конструкторе являются обязательными. Отсутствующие данные будут заполнены нулями по умолчанию.
Пример 10: вывод года, месяца, часа, минуты и метки времени.
from datetime import datetime a = datetime(2017, 11, 28, 23, 55, 59, 342380) print("year =", a.year) print("month =", a.month) print("hour =", a.hour) print("minute =", a.minute) print("timestamp =", a.timestamp())
Когда вы запустите программу, вывод будет следующим:
Пример 11: получение текущего момента времени.
Мы можем получить информацию о текущем моменте времени не только с помощью уже упомянутого метода , но и с помощью .
from datetime import datetime date = datetime.today() print(date) date = datetime.now() print(date)
Когда вы запустите программу, результат будет примерно таким:
Python TimeDelta
Объект Python TimeDelta представляет собой продолжительность времени. Мы можем создать свой объект, используя следующий заводский метод.
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
Обратите внимание, что функция TimeDelta () принимает ключевые аргументы. Все аргументы являются необязательными и по умолчанию до 0
Аргументы могут быть целыми числами или поплавками и могут быть положительными или отрицательными.
Объект TimeDelta поддерживает математические операции, такие как добавление, вычитание, умножение и т. Д. Использование основных операторов, поэтому его очень легко использовать. Это в основном используется для получения объекта DateTime с какой-то датой и временем дельты.
time.ctime
Функция time.ctime конвертирует время в секунды, начиная с эпохи, в строку, показывающую местное время. Если вы ничего не передадите данной функции, то настоящее время вернется обратно. Давайте взглянем на несколько примеров:
Python
import time
print(time.ctime()) # ‘Wed Apr 5 00:02:49 2017’
print(time.ctime(1384112639)) # ‘Sun Nov 10 13:43:59 2013’
1 2 3 4 |
importtime print(time.ctime())# ‘Wed Apr 5 00:02:49 2017’ print(time.ctime(1384112639))# ‘Sun Nov 10 13:43:59 2013’ |
В данном коде мы показали результаты вызова функции time.ctime, как со случайным набором секунд, начиная с эпохи, так и с пустным значением. Это можно применить, к примеру, в том случае, кода кому-нибудь нужно сохранить дату в секундах, начиная с эпохи, после чего конвертировать это в более удабриваемый формат. Немного проще, сохранить большое целое число (или длинное) в базу данных, чем страдать над ним, форматируя объект datetime в какой-либо объект даты, который принимает база данных. Конечно, это также имеет свой недостаток: вам, возможно, нужно будет преобразовать целое число или значение с плавающей запятой обратно в строку.
Creation
To create a new object call with one of the following arguments:
-
Without arguments – create a object for the current date and time:
-
Create a object with the time equal to number of milliseconds (1/1000 of a second) passed after the Jan 1st of 1970 UTC+0.
An integer number representing the number of milliseconds that has passed since the beginning of 1970 is called a timestamp.
It’s a lightweight numeric representation of a date. We can always create a date from a timestamp using and convert the existing object to a timestamp using the method (see below).
Dates before 01.01.1970 have negative timestamps, e.g.:
-
If there is a single argument, and it’s a string, then it is parsed automatically. The algorithm is the same as uses, we’ll cover it later.
-
Create the date with the given components in the local time zone. Only the first two arguments are obligatory.
- The must have 4 digits: is okay, is not.
- The count starts with (Jan), up to (Dec).
- The parameter is actually the day of month, if absent then is assumed.
- If is absent, they are assumed to be equal .
For instance:
The maximal precision is 1 ms (1/1000 sec):
Форматирование и вывод дат
Во всех браузерах, кроме IE10-, поддерживается новый стандарт Ecma 402, который добавляет специальные методы для форматирования дат.
Это делается вызовом , в котором можно задать много настроек. Он позволяет указать, какие параметры даты нужно вывести, и ряд настроек вывода, после чего интерпретатор сам сформирует строку.
Пример с почти всеми параметрами даты и русским, затем английским (США) форматированием:
Вы сможете подробно узнать о них в статье Intl: интернационализация в JavaScript, которая посвящена этому стандарту.
Методы вывода без локализации:
, ,
Возвращают стандартное строчное представление, не заданное жёстко в стандарте, а зависящее от браузера. Единственное требование к нему – читаемость человеком. Метод возвращает дату целиком, и – только дату и время соответственно.
То же самое, что , но дата в зоне UTC.
Возвращает дату в формате ISO Детали формата будут далее. Поддерживается современными браузерами, не поддерживается IE8-.
Если хочется иметь большую гибкость и кросс-браузерность, то также можно воспользоваться специальной библиотекой, например Moment.JS или написать свою функцию форматирования.