How do I get the current time in Python?
The time
module
The time
module provides functions that tell us the time in “seconds since the epoch” as well as other utilities.
import time
Unix Epoch Time
This is the format you should get timestamps in for saving in databases. It is a simple floating-point number that can be converted to an integer. It is also good for arithmetic in seconds, as it represents the number of seconds since Jan 1, 1970, 00:00:00, and it is memory light relative to the other representations of time we’ll be looking at next:
>>> time.time()
1424233311.771502
This timestamp does not account for leap-seconds, so it’s not linear – leap seconds are ignored. So while it is not equivalent to the international UTC standard, it is close, and therefore quite good for most cases of record-keeping.
This is not ideal for human scheduling, however. If you have a future event you wish to take place at a certain point in time, you’ll want to store that time with a string that can be parsed into a datetime
object or a serialized datetime
object (these will be described later).
time.ctime
You can also represent the current time in the way preferred by your operating system (which means it can change when you change your system preferences, so don’t rely on this to be standard across all systems, as I’ve seen others expect). This is typically user friendly, but doesn’t typically result in strings one can sort chronologically:
>>> time.ctime()
'Tue Feb 17 23:21:56 2015'
You can hydrate timestamps into human readable form with ctime
as well:
>>> time.ctime(1424233311.771502)
'Tue Feb 17 23:21:51 2015'
This conversion is also not good for record-keeping (except in text that will only be parsed by humans – and with improved Optical Character Recognition and Artificial Intelligence, I think the number of these cases will diminish).
datetime
module
The datetime
module is also quite useful here:
>>> import datetime
datetime.datetime.now
The datetime.now
is a class method that returns the current time. It uses the time.localtime
without the timezone info (if not given, otherwise see timezone aware below). It has a representation (which would allow you to recreate an equivalent object) echoed on the shell, but when printed (or coerced to a str
), it is in human readable (and nearly ISO) format, and the lexicographic sort is equivalent to the chronological sort:
>>> datetime.datetime.now()
datetime.datetime(2015, 2, 17, 23, 43, 49, 94252)
>>> print(datetime.datetime.now())
2015-02-17 23:43:51.782461
datetime’s utcnow
You can get a datetime object in UTC time, a global standard, by doing this:
>>> datetime.datetime.utcnow()
datetime.datetime(2015, 2, 18, 4, 53, 28, 394163)
>>> print(datetime.datetime.utcnow())
2015-02-18 04:53:31.783988
UTC is a time standard that is nearly equivalent to the GMT timezone. (While GMT and UTC do not change for Daylight Savings Time, their users may switch to other timezones, like British Summer Time, during the Summer.)
datetime timezone aware
However, none of the datetime objects we’ve created so far can be easily converted to various timezones. We can solve that problem with the pytz
module:
>>> import pytz
>>> then = datetime.datetime.now(pytz.utc)
>>> then
datetime.datetime(2015, 2, 18, 4, 55, 58, 753949, tzinfo=<UTC>)
Equivalently, in Python 3 we have the timezone
class with a utc timezone
instance attached, which also makes the object timezone aware (but to convert to another timezone without the handy pytz
module is left as an exercise to the reader):
>>> datetime.datetime.now(datetime.timezone.utc)
datetime.datetime(2015, 2, 18, 22, 31, 56, 564191, tzinfo=datetime.timezone.utc)
And we see we can easily convert to timezones from the original UTC object.
>>> print(then)
2015-02-18 04:55:58.753949+00:00
>>> print(then.astimezone(pytz.timezone('US/Eastern')))
2015-02-17 23:55:58.753949-05:00
You can also make a naive datetime object aware with the pytz
timezone localize
method, or by replacing the tzinfo attribute (with replace
, this is done blindly), but these are more last resorts than best practices:
>>> pytz.utc.localize(datetime.datetime.utcnow())
datetime.datetime(2015, 2, 18, 6, 6, 29, 32285, tzinfo=<UTC>)
>>> datetime.datetime.utcnow().replace(tzinfo=pytz.utc)
datetime.datetime(2015, 2, 18, 6, 9, 30, 728550, tzinfo=<UTC>)
The pytz
module allows us to make our datetime
objects timezone aware and convert the times to the hundreds of timezones available in the pytz
module.
One could ostensibly serialize this object for UTC time and store that in a database, but it would require far more memory and be more prone to error than simply storing the Unix Epoch time, which I demonstrated first.
The other ways of viewing times are much more error-prone, especially when dealing with data that may come from different time zones. You want there to be no confusion as to which timezone a string or serialized datetime object was intended for.
If you’re displaying the time with Python for the user, ctime
works nicely, not in a table (it doesn’t typically sort well), but perhaps in a clock. However, I personally recommend, when dealing with time in Python, either using Unix time, or a timezone aware UTC datetime
object.
В этой статье вы научитесь получать в Python текущее время вашего региона, а также различные часовые пояса.
Есть несколько способов узнать текущее время в Python.
Пример 1: Текущее время с использованием объекта datetime
from datetime import datetime now = datetime.now() current_time = now.strftime("%H:%M:%S") print("Current Time =", current_time)
Выход
Current Time = 07:41:19
В приведенном выше примере мы импортировали класс datetime из модуля datetime. Затем мы использовали метод now(), чтобы получить объект, содержащий текущую дату и время.
Затем, используя метод datetime.strftime(), мы создали строку, представляющую текущее время.
Если вам нужно создать объект времени, содержащий текущее время, вы можете сделать что-то вроде этого.
from datetime import datetime now = datetime.now().time() # time object print("now =", now) print("type(now) =", type(now))
Выход
now = 07:43:37.457423 type(now) = <class 'datetime.time'>
Пример 2: Текущее время с использованием модуля времени
Вы также можете узнать текущее время, используя модуль времени.
import time t = time.localtime() current_time = time.strftime("%H:%M:%S", t) print(current_time)
Выход
07:46:58
Пример 3: Текущее время часового пояса
Если вам нужно найти текущее время определенного часового пояса, вы можете использовать модуль pytZ.
from datetime import datetime import pytz tz_NY = pytz.timezone('America/New_York') datetime_NY = datetime.now(tz_NY) print("NY time:", datetime_NY.strftime("%H:%M:%S")) tz_London = pytz.timezone('Europe/London') datetime_London = datetime.now(tz_London) print("London time:", datetime_London.strftime("%H:%M:%S"))
Выход
NY time: 03:45:16 London time: 08:45:16
497114cookie-checkКак получить текущее время в Python?
Datetime — важный элемент любой программы, написанной на Python. Этот модуль позволяет управлять датами и временем, представляя их в таком виде, в котором пользователи смогут их понимать.
datetime
включает различные компоненты. Так, он состоит из объектов следующих типов:
date
— хранит датуtime
— хранит времяdatetime
— хранит дату и время
Как получить текущие дату и время?
С помощью модуля Python это сделать очень просто. Сначала нужно импортировать класс datetime
из модуля datetime
, после чего создать объект datetime
. Модуль предоставляет метод now()
, который возвращает текущие дату и время с учетом локальных настроек.
import datetime
dt_now = datetime.datetime.now()
print(dt_now)
А вот результат:
2020-11-14 15:43:32.249588
Класс date
можно использовать для получения или изменения объектов даты. Например, для получения текущей с учетом настроек подойдет следующее:
from datetime import date
current_date = date.today()
print(current_date)
Результат:
2020-11-14
Текущая дата — 2020-11-14 в формате год-месяц-день соответственно.
Получить текущее время
Для получения текущего локального времени сперва нужно получить текущие дату и время, а затем достать из этого объекта только время с помощью метода time()
:
import datetime
current_date_time = datetime.datetime.now()
current_time = current_date_time.time()
print(current_time)
Результат:
15:51:05.627643
Компоненты datetime в Python
Модуль datetime в Python может использоваться для получения разных версий времени. Для этого нужно ознакомиться с атрибутами модуля. Используем для этого функцию dir()
.
import datetime
attr = dir(datetime)
print(attr)
# ['MAXYEAR', 'MINYEAR', '__doc__', '__name__', '__package__', 'date', 'datetime',
# 'datetime_CAPI', 'time', 'timedelta', 'tzinfo']
В этом руководстве речь пойдет о следующих элементах:
date
— объекты датыdatetime
— объекты даты и времениtime
— объекты времениtimedelta
— этот атрибут покрывает интервалы и используется для определения прошлых или будущих событийTzinfo
— этот атрибут отвечает за часовые пояса
Как создавать объекты даты и времени
Для создания объекта времени используется класс time
из модуля datetime в Python. Синтаксис следующий: datetime.time(hour, minutes, seconds)
.
В этом примере создается объект времени представленный следующим образом (8, 48, 45).
import datetime
timeobj= datetime.time(8,48,45)
print(timeobj)
Результат такой:
08:48:45
Сначала импортируется модуль datetime
. После этого создается экземпляр класса (объект time
). Затем ему присваивается значение datetime.time(8, 48, 45)
, где параметры 8, 48 и 45 представляют собой часы, минуты и секунды соответственно.
Для создания объекта даты нужно передать дату с использованием следующего синтаксиса:
datetime.datetime(year,month,day))
Такой пример:
import datetime
date_obj = datetime.datetime(2020,10,17)
print(date_obj)
Вернет вот такой результат:
2020-10-17 00:00:00
Timedelta
timedelta
представляет длительность (даты или времени). Модуль datetime включает атрибут timedelta()
, который используется для управления датой в Python. Объект timedelta
выглядит следующим образом:
td_object =timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
td_object
datetime.timedelta(0)
Все аргументы опциональные и их значения по умолчанию равно 0. Они могут быть целыми или числами с плавающей точкой, как положительными, так и отрицательными. Благодаря этому можно выполнять математические операции, такие как сложение, вычитание и умножение.
Как вычислить разницу для двух дат
Посмотрим на несколько примеров вычисления разницы во времени. Предположим, есть два объекта datetime
:
first_date = date(2020, 10, 2)
second_date = date(2020, 10, 30)
Для получения разницы нужно лишь вычесть значение одного объекта из второго:
from datetime import date
first_date = date(2020, 10, 2)
second_date = date(2020, 10, 30)
delta = second_date - first_date
print(delta)
Результат:
28 days,0:00:00
Таким образом между 2 и 30 октября 2020 года 28 дней.
Как вычислить разницу двух объектов datetime.time
С помощью timedelta
нельзя выполнять манипуляции над объектами time
. Например:
from datetime import datetime, timedelta
current_datetime = datetime.now()
current_time = current_datetime.time()
print("Текущее время:", current_time)
tm_after_1_hr = current_time + timedelta(hours=1)
print(tm_after_1_hr)
Такой код вернет следующую ошибку:
Traceback (most recent call last):
File "C:UsersalexAppDataLocalProgramsPythonPython38sg_verify.py", line 6, in
tm_after_1_hr = current_time + timedelta(hours=1)
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.timedelta'
Как получать прошлые и будущие даты с помощью timedelta
Поскольку timedelta
— это длительность, то для получения прошлой или будущей даты нужно добавить объект timedelta
к существующему или вычесть из него же. Вот пример нескольких уравнений, где n
— это целое число, представляющее количество дней:
import datetime
current_date = datetime.datetime.today()
past_date = datetime.datetime.today() – datetime.timedelta(days=n)
future_date = datetime.datetime.today() – datetime.timedelta(days=n)
Если нужно, например, получить дату за прошлые две недели, то достаточно вычесть 14 дней из текущей даты:
import datetime
past_date = datetime.datetime.today() - datetime.timedelta(days=14)
print(past_date)
Результат:
2020-10-31 16:12:09.142258
Предположим, вы задумали практиковать определенный навык в течение 21 дня. Для получения будущей даты нужно добавить 21 день к текущей дате:
import datetime
future_date = datetime.datetime.today() + datetime.timedelta(days=21)
print(future_date)
Результат:
2020-12-05 16:14:09.718325
Другие арифметические операции с timedelta
Значения даты и времени могут сравниваться для определения того, какая из них была раньше или позже. Например:
import datetime
now = datetime.time(9, 31, 0)
next_hour = datetime.time(10, 31, 0)
print('now < next_hour:', now < next_hour)
today = datetime.date.today()
next_week = datetime.date.today() + datetime.timedelta(days=7)
print('today > next_week:', today > next_week)
Результат:
now < next_hour: True
today > next_week: False
Часовые пояса
Пока что мы работали с datetime
без учета часовых поясов и летнего времени. Но прежде чем переходить к следующим пунктам, нужно разобраться с разницей в абсолютных (naive) и относительных (aware) датах.
Абсолютные даты не содержат информацию, которая бы могла определить часовой пояс или летнее время. Однако с такими намного проще работать.
Относительные же содержат достаточно информации для определения часового пояса или отслеживания изменений из-за летнего времени.
Разница между DST, GMT и UTC
- GMT
Официальный часовой пояс, используемый в некоторых странах Европы и Африки. Он может быть представлен как в 24, так и в 12-часовом форматах. GMT используется для того, чтобы задавать местное время. Например, местное время для Берлина 2020–10–17 09:40:33.614581+02:00 GMT. Для Найроби же это — 2020–10–17 10:40:33.592608+03:00 GMT. - DST (летнее время)
Страны, которые переходят на летнее время, делают это для того, чтобы дневное время длилось как можно дольше. Во время летнего времени они переводят стрелки своих часов на час вперед и возвращаются обратно осенью. - UTC (всемирное координированное время)
Временной стандарт для часовых поясов во всем мире. Он позволяет синхронизировать время во всем мире и служит отправной точкой для остальных.
Как работать с часовыми поясами
Рассмотрим, как создать простой относительный объект datetime
:
import datetime
dt_now = datetime.datetime.utcnow()
print(dt_now)
Эта программа возвращает объект с абсолютным значением datetime
. Если же нужно сделать его абсолютным, то нужно явно указать часовой пояс. Как это сделать? В библиотеке datetime
в Python нет модуля для работы с часовыми поясами. Для этого нужно использовать другие библиотеки. Одна из таких — pytz.
Предположим, нужно получить текущее время для Найроби. Для этого нужно использовать конкретный часовой пояс. Для начала можно с помощью pytz получить все существующие часовые пояса.
import pytz
pytz.all_timezones
Вот некоторые из них:
['Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Nairobi']
Для получения времени в Найроби:
import pytz
import datetime
tz_nairobi = pytz.timezone("Africa/Nairobi")
dt_nairobi =datetime.datetime.now(tz_nairobi)
print(dt_nairobi)
Результат:
2020-11-14 17:27:31.141255+03:00
А вот так можно получить время Берлина:
import pytz
import datetime
tz_berlin = pytz.timezone("Europe/Berlin")
dt_berlin =datetime.datetime.now(tz_berlin)
print(dt_berlin)
Результат:
2020-11-14 15:28:20.977529+01:00
Здесь можно увидеть разницу в часовых поясах разных городов, хотя сама дата одна и та же.
Конвертация часовых поясов
При конвертации часовых поясов в первую очередь нужно помнить о том, что все атрибуты представлены в UTC. Допустим, нужно конвертировать это значение в America/New_York
:
import datetime
import pytz
timezone_berlin = '2019-06-29 17:08:00'
tz_ber_obj = datetime.datetime.strptime(timezone_berlin, '%Y-%m-%d %H:%M:%S')
timezone_newyork = pytz.timezone('America/New_York')
timezone_newyork_obj = timezone_newyork.localize(tz_ber_obj)
print(timezone_newyork_obj)
print(timezone_newyork_obj.tzinfo)
Результат:
2019-06-29 17:08:00-04:00
America/New_York
Другие практические примеры
Всегда храните даты в UTC. Вот примеры:
import datetime
import pytz
time_now = datetime.datetime.now(pytz.utc)
print(time_now)
Результат для этого кода — 2020-11-14 14:38:46.462397+00:00
, хотя локальное время может быть, например, таким 2020-11-14 16:38:46.462397+00:00
. А уже при демонстрации даты пользователю стоит использовать метод localize
с местными настройками:
import datetime
import pytz
now = datetime.datetime.today()
now_utc = pytz.utc.localize(now)
Вернет текущее локальное время — 2020-11-14 16:42:38.228528+00:00
.
Как конвертировать строки в datetime
strptime()
в Python — это метод из модуля datetime. Вот его синтаксис:
dateobj = datetime.strptime(date_string, format)
Аргументы формата необязательные и являются строками. Предположим, нужно извлечь текущие дату и время:
import datetime
current_dt = datetime.datetime.now()
print(current_dt)
Результат:
2020-11-14 16:50:45.049229
Результат будет в формате ISO 8601, то есть YYYY-MM-DDTHH:MM:SS.mmmmmm — формат по умолчанию, что позволяет получать строки в едином формате.
Таблица форматов:
Символ | Описание | Пример |
---|---|---|
%a | День недели, короткий вариант | Wed |
%A | Будний день, полный вариант | Wednesday |
%w | День недели числом 0-6, 0 — воскресенье | 3 |
%d | День месяца 01-31 | 31 |
%b | Название месяца, короткий вариант | Dec |
%B | Название месяца, полное название | December |
%m | Месяц числом 01-12 | 12 |
%y | Год, короткий вариант, без века | 18 |
%Y | Год, полный вариант | 2018 |
%H | Час 00-23 | 17 |
%I | Час 00-12 | 05 |
%p | AM/PM | PM |
%M | Минута 00-59 | 41 |
%S | Секунда 00-59 | 08 |
%f | Микросекунда 000000-999999 | 548513 |
%z | Разница UTC | +0100 |
%Z | Часовой пояс | CST |
%j | День в году 001-366 | 365 |
%U | Неделя числом в году, Воскресенье первый день недели, 00-53 | 52 |
%W | Неделя числом в году, Понедельник первый день недели, 00-53 | 52 |
%c | Локальная версия даты и времени | Mon Dec 31 17:41:00 2018 |
%x | Локальная версия даты | 12/31/18 |
%X | Локальная версия времени | 17:41:00 |
%% | Символ “%” | % |
import datetime
date_string = "11/17/20"
date_obj = datetime.datetime.strptime(date_string, '%m/%d/%y')
print(date_obj)
Результат:
2020-11-17 00:00:00
Примеры конвертации строки в объект datetime с помощью strptime
Предположим, что есть следующая строка с датой: «11/17/20 15:02:34», и ее нужно конвертировать в объект datetime
.
from datetime import datetime
datetime_string = "11/17/20 15:02:34"
datetime_obj = datetime.strptime(datetime_string, '%m/%d/%y %H:%M:%S')
print(datetime_obj)
Результат:
2020-11-17 15:02:34
Даты могут быть записаны в разных форматах. Например, следующие даты отличаются лишь представлением:
- Friday, November 17, 2020;
- 11/17/20;
- 11–17–2020.
Вот как это работает:
from datetime import datetime
# создадим даты как строки
ds1 = 'Friday, November 17, 2020'
ds2 = '11/17/20'
ds3 = '11-17-2020'
# Конвертируем строки в объекты datetime и сохраним
dt1 = datetime.strptime(ds1, '%A, %B %d, %Y')
dt2 = datetime.strptime(ds2, '%m/%d/%y')
dt3 = datetime.strptime(ds3, '%m-%d-%Y')
print(dt1)
print(dt2)
print(dt3)
Результат будет одинаковым для всех форматов:
2020-11-17 00:00:00
2020-11-17 00:00:00
2020-11-17 00:00:00
Практические примеры
Если строка представлена в формате «Oct 17 2020 9:00PM», то ее можно конвертировать следующим образом:
date_string = 'Oct 17 2020 9:00PM'
date_object = datetime.strptime(date_string, '%b %d %Y %I:%M%p')
print(date_object)
Результат — 2020-10-17 21:00:00
.
Функцию strptime()
можно использовать для конвертации строки в объект даты:
from datetime import datetime
date_string = '10-17-2020'
date_object = datetime.strptime(date_string, '%m-%d-%Y').date()
print(type(date_object))
print(date_object)
Результат:
2020-10-17
Как конвертировать объект datetime в строку
Модуль datetime в Python содержит метод strftime()
, который делает обратное (то есть, конвертирует объект datetime
и time
в строки). Вот его синтаксис:
datetime_string = datetime_object.strftime(format_string)
time_string = datetime_object.strftime(format_string[,time_object])
Примеры конвертации datetime в строку с помощью strftime()
Предположим, нужно конвертировать текущий объект datetime
в строку. Сначала нужно получить представление объекта datetime
и вызвать на нем метод strftime()
.
import datetime
current_date = datetime.datetime.now()
current_date_string = current_date.strftime('%m/%d/%y %H:%M:%S')
print(current_date_string)
Результат — 11/14/20 17:15:03
.
Как получить строковое представление даты и времени с помощью функции format()
Пример №1. Конвертация текущей временной метки в объекте datetime
в строку в формате «DD-MMM-YYYY (HH:MM:SS:MICROS)»:
import datetime
dt_obj =datetime.datetime.now()
dt_string = dt_obj.strftime("%d-%b-%Y (%H:%M:%S.%f)")
print('Текущее время : ', dt_string)
Результат:
Текущее время : 14-Nov-2020 (17:18:09.890960)
Пример №2. Конвертация текущей временной метки объекта datetime
в строку в формате «HH:MM:SS.MICROS – MMM DD YYYY».
import datetime
dt_obj =datetime.datetime.now()
dt_string = dt_obj.strftime("%H:%M:%S.%f - %b %d %Y")
print('Текущее время : ', dt_string)
Результат:
Текущее время : 17:20:28.841390 - Nov 14 2020
Другие datetime-библиотеки в Python
В Python есть и другие библиотеки, которые упрощают процесс манипуляций с объектами datetime. В некоторых из них есть поддержка часовых поясов.
Arrow
Arrow — еще один популярный модуль, который делает более простым процесс создания, управления и форматирования дат и времени. Получить его можно с помощью pip. Для установки достаточно ввести pip install arrow
.
Arrow можно использовать для получения текущего времени по аналогии с модулем datetime:
import arrow
current_time = arrow.now()
print(current_time)
print(current_time.to('UTC'))
Результат:
2020-11-14T15:52:58.921198+00:00
2020-11-14T15:52:58.921198+00:00
Maya
Maya упрощает процесс парсинга строк и конвертации часовых поясов. Например:
import maya
dt = maya.parse('2019-10-17T17:45:25Z').datetime()
print(dt.date())
print(dt)
print(dt.time())
Результат:
2019-10-17
2019-10-17 17:45:25+00:00
17:45:25
Dateutil
Dateutil — это мощная библиотека, которая используется для парсинга дат и времени в разных форматах. Вот некоторые примеры.
from dateutil import parser
dt_obj = parser.parse('Thu Oct 17 17:10:28 2019')
print(dt_obj)
dt_obj1=parser.parse('Thursday, 17. October 2019 5:10PM')
print(dt_obj1)
dt_obj2=parser.parse('10/17/2019 17:10:28')
print(dt_obj2)
t_obj=parser.parse('10/17/2019')
print(t_obj)
Результат:
2019-10-17 17:10:28
2019-10-17 17:10:00
2019-10-17 17:10:28
2010-10-17 00:00:00
Важно, что в этом случае не нужны регулярные выражения при определении формата. Парсер ищет узнаваемые токены и либо возвращает корректный результат, либо выдает ошибку.
Важные нюансы
Вот о чем важно помнить при работе с datetime
в Python:
- Рекомендуется всегда работать с UTC. Это позволяет не думать о часовых поясах, что часто приводит к ошибкам из-за разницы во времени в разных регионах.
- Дату и время стоит конвертировать в локальную только при выводе пользователю.
Выводы
Есть масса сценариев работы с датой и временем в реальных приложениях. Например:
- Запланировать работу скрипта на определенное время.
- Отфильтровать даты.
- Извлечь дату из определенных API каждый день, в определенное время.
- Приложения для отслеживания событий, записей, бронирования и так далее.
Getting the current time in Python is a nice starting point for many time-related operations. One very important use case is creating timestamps. In this tutorial, you’ll learn how to get, display, and format the current time with the datetime
module.
To effectively use the current time in your Python applications, you’ll add a few tools to your belt. For instance, you’ll learn how to read attributes of the current time, like the year, minutes, or seconds. To make the time more easily readable, you’ll explore options for printing it. You’ll also get to know different formats of time and learn how computers represent time, how to serialize time, and how to deal with time zones.
How to Tell the Time in Python
The most straightforward way to get and print the current time is to use the .now()
class method from the datetime
class in the datetime
module:
>>>
>>> from datetime import datetime
>>> now = datetime.now()
>>> now
datetime(2022, 11, 22, 14, 31, 59, 331225)
>>> print(now)
2022-11-22 14:31:59.331225
The class method .now()
is a constructor method that returns a datetime
object. When the REPL evaluates the now
variable, you get a representation of the datetime
object. It can be pretty hard to tell what each number means. But if you explicitly print the now
variable, then you get a slightly different output that presents the information in a familiar timestamp format.
You may recognize the format of the printed datetime
object. It closely follows an international standard, ISO 8601, for formatting time and dates. You’ll find this format in many places!
There’s a slight deviation from the ISO 8601 standard in the format that Python uses, though. The standard says that the date and the hour parts of the timestamp should be separated by a T
character, but the default datetime
object passed through the print()
function separates them with a single space.
Python, being ever extensible and customizable, enables you to customize the format in which it prints the timestamp. The datetime
class internally uses its .isoformat()
method when printing. Since .isoformat()
is just an instance method, you can call it directly from any datetime
object to customize the ISO timestamp:
>>>
>>> datetime.now().isoformat()
'2022-11-22T14:31:59.331225'
>>> datetime.now().isoformat(sep=" ")
'2022-11-22 14:31:59.331225'
You’ll note that when you call .isoformat()
without any arguments, the standard ISO 8601 separator T
is used. The way that the datetime
class has implemented its special instance method .__str__()
under the hood, though, is with a single space as the sep
argument.
Being able to get the full date and time is great, but sometimes you might be looking for something specific. Maybe you only want the month or day, for example. In those cases, you can choose from a bunch of attributes:
>>>
>>> from datetime import datetime
>>> now = datetime.now()
>>> print(f"""
... {now.month = }
... {now.day = }
... {now.hour = }
... {now.minute = }
... {now.weekday() = }
... {now.isoweekday() = }"""
... )
now.month = 11
now.day = 22
now.hour = 14
now.minute = 31
now.weekday() = 1
now.isoweekday() = 2
In this snippet, you use a triple-quoted f-string with the =
sign within the curly brackets to output the expressions and their results.
Go ahead and explore the different attributes and methods by calling the dir()
function with a datetime
object to list the names available in the current scope. Or you can check out the documentation for datetime
. Either way, you’ll find a wealth of options.
You’ll note that the results from the last example are generally numbers. This may suit you fine, but maybe showing weekdays as numbers isn’t ideal. It can also be especially confusing since the .weekday()
and .isoweekday()
methods return different numbers.
An ISO timestamp is nice, but maybe you want something even more readable than an ISO timestamp. For example, milliseconds might be a bit much for a person to read. In the next section, you’ll learn how to format your timestamps in any way you like.
Format Timestamps for Readability
To make it easy to output times in a custom, human-readable way, datetime
has a method called .strftime()
. The .strftime()
method takes a format code as an argument. A format code is a string with a bunch of special tokens that’ll be replaced with information from the datetime
object.
The .strftime()
method will give you loads of options for how exactly to represent your datetime
object. For instance, take this format:
>>>
>>> from datetime import datetime
>>> datetime.now().strftime("%A, %B %d")
'Tuesday, November 22'
In this example, you used the following format codes:
%A
: Weekday full name%B
: Month full name%d
: Numeric day of the month
The comma in the format string and the literal spaces are printed as is. The .strftime()
method only replaces what it recognizes as codes. Format codes in .strftime()
always begin with a percentage sign (%
), which follows an old C standard. These codes are similar to the old printf
string formatting style, but they’re not the same.
The documentation for format codes has a nice table showing you all the different format codes that you can use. There’s also a nice cheatsheet at the aptly named strftime.org website. Go check them out.
So now you can get the time and format it to your liking. That should get you going for your basic time-telling needs, but maybe you’re curious about how computers represent and deal with time internally and how you might store times in files or databases. In the next section, you’ll be getting into just that.
Get the Current Unix Time in Python
Computers like numbers. But dates and times are funny human numbers that follow funny rules. Twenty-four hours in a day? Sixty minutes in an hour? Whose bright ideas were these?
To simplify matters, and seeing as computers don’t mind large numbers, a decision was made sometime while the Unix operating system was being developed.
The decision was to represent all times as the number of seconds that have passed since midnight UTC on January 1, 1970. This point in time is also known as the Unix epoch. The time system is known as Unix time. Most computer systems today—even Windows—use Unix time to represent times internally.
Unix time at midnight UTC on the January 1, 1970, is zero. If you want to know the current Unix time, then you can use another datetime
method:
>>>
>>> from datetime import datetime
>>> datetime.now().timestamp()
1669123919.331225
The .timestamp()
method returns the number of seconds since the Unix epoch to a high level of precision. After all, underneath all the attributes and methods, every date is little more than a large number for most computers.
For the most part, you can leave Unix time alone. It’s a way to represent time that works well for computers, but not for people who are used to a human calendar like the Gregorian calendar. Unix timestamps will crop up in your date and time adventures, though, so they’re definitely good to know about.
One of the nicest things about a properly generated Unix timestamp is that it unambiguously captures a moment worldwide. The Unix epoch is always in UTC, so there’s no ambiguity in terms of time zone offsets—that is, if you can reliably create timestamps that have no offset from UTC.
But unfortunately, you’ll often have to deal with the messiness of time zones. Never fear, though! In the next section, you’ll get to know time zone–aware datetime
objects.
Get Time Zone–Aware Python Time and Date Objects
The unambiguity of Unix timestamps is attractive, but it’s generally better to serialize times and dates with the ISO 8601 format because, in addition to being easy for computers to parse, it’s also human readable, and it’s an international standard.
Whats more, even though Unix timestamps are somewhat recognizable, they could be mistaken for representing something else. They’re just numbers, after all. With an ISO timestamp, you immediately know what it represents. To quote the Zen of Python, readability counts.
If you want to represent your datetime
objects in completely unambiguous terms, then you’ll first need to make your object time zone aware. Once you have a time zone–aware object, the time zone information gets added to your ISO timestamp:
>>>
>>> from datetime import datetime
>>> now = datetime.now()
>>> print(now.tzinfo)
None
>>> now_aware = now.astimezone()
>>> print(now_aware.tzinfo)
Romance Standard Time
>>> now_aware.tzinfo
datetime.timezone(datetime.timedelta(seconds=3600), 'Romance Standard Time')
>>> now_aware.isoformat()
'2022-11-22T14:31:59.331225+01:00'
In this example, you start off by demonstrating that the now
object doesn’t have any time zone information because its .tzinfo
attribute returns None
. When you call .astimezone()
on now
without any arguments, the local system time zone is used to populate .tzinfo
with a timezone
object.
A timezone
object is essentially just an offset from UTC time and a name. In the example, the name of the local time zone is Romance Standard Time, and the offset is 3,600 seconds, or one hour.
Now that the datetime
object has a timezone
object, you can consider it time zone aware. So when you call .isoformat()
on the time zone–aware object, you’ll notice that +01:00
is added to the end. This represents the one-hour offset from UTC time.
If you were in a different location, such as Lima, Peru, then your .isoformat()
output might look like this:
>>>
>>> now_aware.isoformat()
'2022-11-22T07:31:59.331225-06:00'
The time will be different, and you’ll see the UTC offset is now -06:00
. So now your timestamps look good and are unambiguous in terms of what time they represent.
You could even go a step further, as many do, and store your timestamps in UTC time, so that everything is nicely normalized:
>>>
>>> from datetime import datetime, timezone
>>> now = datetime.now()
>>> now.isoformat()
'2022-11-22T14:31:59.331225'
>>> now_utc = datetime.now(timezone.utc)
>>> now_utc.isoformat()
'2022-11-22T13:31:59.331225+00:00'
Passing the timezone.utc
time zone to the .now()
constructor method will return a UTC time. Note that the time is offset from the local time in this example.
The ISO 8601 standard also accepts Z
in place of +00:00
to represent UTC time. This is sometimes referred to as Zulu time, which is what it’s often called in aviation.
In aviation, you always operate in UTC time. Operating in a common time, regardless of location, is critical in a field like aviation. Imagine air traffic control having to deal with every plane reporting estimated landing times according to their place of origin. That kind of situation would be a recipe for confusion, and disaster!
Conclusion
In this tutorial, you’ve told the time! You’ve generated a datetime
object and have seen how to pick out different attributes of the object. You’ve also examined a few ways to output the datetime
object in different formats.
You’ve also acquainted yourself with UNIX time and ISO timestamps and explored how you can represent your timestamp unambiguously. For this, you’ve dipped your toes into the complex world of time zones and made your datetime
object time zone aware.
If you’re looking to time how long things take, then check out the tutorial Python Timer Functions: Three Ways to Monitor Your Code. To dive deeper into the datetime
module, check out Using Python datetime to Work With Dates and Times.
Now you can say that time really is on your side! How do you use the datetime
module? Share your ideas and war stories in the comments below.
To get the current time in Python:
- Import datetime from datetime module.
- Call datetime.now to get the current date.
- Format the date to only show hours, minutes, and seconds.
For example, here is a simple piece of code to get the current time:
from datetime import datetime now = datetime.now().strftime("%H:%M:%S") print(f"The time is {now}")
This displays the current time in HH:MM:SS format:
The time is 14:42:24
This is a comprehensive guide to getting the current time in Python.
You will learn how to get the current time in different formats and contexts in Python. For example, you’ll learn how to get the current time in milliseconds, in the Epoch format, and how to extract different time components from it.
Dealing with time is crucial in some Python programs. To make handling instances of time easier in your projects, Python has some useful libraries like time and datetime.
Read more about using the datetime module in Python.
Let’s take a complete look at how you can get the current time in Python using different timezones, formats, and such.
Current Time in Milliseconds
Milliseconds means one-thousandth (1/1000th) of a second.
To get the current time in milliseconds in Python:
- Import time module.
- Get the current epoch time.
- Multiply the current epoch time by 1000.
For instance:
import time t = time.time() t_ms = int(t * 1000) print(f"The current time in milliseconds: {t_ms}")
Output:
The current time in milliseconds: 1635249073607
Current Time in Seconds
To get the current time in seconds in Python:
- Import time module.
- Get the current epoch time.
- Convert the epoch time to an integer.
For example:
import time t = time.time() t_s = int(t) print(f"The current time in seconds: {t_s}")
Output:
The current time in seconds: 1635249118
Get Current Local Date and Time
To get the current local date and time in Python:
- Import the datetime class from the datetime module.
- Ask for the current time by datetime.now().
For instance:
from datetime import datetime now = datetime.now() print(f"The timestamp is {now}")
Output:
The timestamp is 2021-10-26 14:53:37.807390
Get Current Timezone
To get the current local timezone in Python:
- Import the datetime class from the datetime module.
- Get the current time.
- Convert the current time to time that stores timezone information.
- Get your local timezone from the timezone information.
For instance:
from datetime import datetime now = datetime.now() now_with_tz = now.astimezone() my_timezone = now_with_tz.tzinfo print(my_timezone)
I am in the EEST timezone (Eastern European Summer Time), so the above code gives me:
EEST
Get Current Epoch/Unix Timestamp
The epoch time/UNIX time refers to how many seconds have passed since Jan 1st, 1970.
To get the current epoch/UNIX timestamp in Python:
- Import the time module.
- Call the time.time() function.
For example:
import time t_epoch = time.time() print(f"The epoch time is now: {t_epoch}")
Output:
The epoch time is now: 1635251715.9572039
Current UTC Time
To get the current time in UTC time format in Python:
- Import datetime and timezone from the datetime module.
- Get the current time in the UTC timezone.
For instance:
from datetime import datetime, timezone now = datetime.now(timezone.utc) print(f"Current UTC Time: {now}")
Output:
Current UTC Time: 2021-10-26 12:01:54.888681+00:00
Current ISO Time
The ISO 8601 (International Organization for Standardization) is a standard way to express time.
ISO 8601 follows the format T[hh]:[mm]:[ss].
To get the current time in ISO format in Python:
- Import the datetime class from the datetime module.
- Convert current time to ISO format.
For example:
from datetime import datetime ISO_time = datetime.now().isoformat() print(f"Current DateTime in ISO: {ISO_time}")
Output:
Current DateTime in ISO: 2021-10-26T15:02:36.635934
Current GMT Time
The GMT or Greenwich Mean Time is the solar time observed in Greenwich, London.
To get the current GMT time in Python:
- Import gmttime, strftime from the time module.
- Get the GMT time with the gmttime() function.
- Format the time.
For instance:
from time import gmtime, strftime now_GMT = strftime("%a, %d %b %Y %I:%M:%S %p %Z", gmtime()) print("GMT time is now: " + now_GMT)
Output:
GMT time is now: Tue, 26 Oct 2021 12:10:09 PM UTC
Get Current Years, Months, Days, Hours, Minutes, and Seconds
To extract years, months, days, hours, minutes, and seconds in Python:
- Import the datetime class from the datetime module.
- Get the current date object.
- Pull the time components from the current date object.
For instance:
from datetime import datetime now = datetime.now() print(f"Year: {now.year}") print(f"Month: {now.month}") print(f"Day: {now.day}") print(f"Hour: {now.hour}") print(f"Minute: {now.minute}") print(f"Second: {now.second}")
Output:
Year: 2021 Month: 10 Day: 26 Hour: 15 Minute: 13 Second: 48
This completes the guide! I hope you find it useful and learned something new. Thanks for reading. Happy coding!
Further Reading
- Python Tricks
- How to Write to a File in Python
- The with Statement in Python
About the Author
-
I’m an entrepreneur and a blogger from Finland. My goal is to make coding and tech easier for you with comprehensive guides and reviews.
Recent Posts