Как управлять датой и временем в python?

Get the current date & time using datetime.now()

Python provides a module datetime which has a class datetime. It provides a method now().

datetime.now(tz=None)

To use this we need to import datetime class from datetime module i.e.

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

Output

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

Output:

2018 / 11 / 18
9 : 32 : 36 . 435350

Let’s get the current timestamp & convert the datetime object to DD-MMM-YYYY (HH:MM::SS.MICROS) format i.e.

# Converting datetime object to string
dateTimeObj = datetime.now()

timestampStr = dateTimeObj.strftime("%d-%b-%Y (%H:%M:%S.%f)")

print('Current Timestamp : ', timestampStr)

Output:

Current Timestamp :  18-Nov-2018 (09:32:36.435350)

Improving Your PyCon Countdown

Now that you know how to add time zone information to a Python instance, you can improve your PyCon countdown code. Earlier, you used the standard constructor to pass the year, month, day, and hour that PyCon will start. You can update your code to use the module, which provides a more natural interface for creating instances:

In this code, you import and from and from . Next, you use to read the date of the next PyCon US from a string. This is much more readable than the plain constructor.

returns a naive instance, so you use to change the to the time zone. PyCon US 2021 will take place in Pittsburgh, Pennsylvania, which is in the US Eastern time zone. The canonical name for that time zone is since New York City is the largest city in the time zone.

is an aware instance with the time zone set to US Eastern time. Since May 12 is after daylight saving time takes effect, the time zone name is , or .

Преобразование формата даты и времени в PHP

Простейший механизм, позволяющий преобразовать числовое значение даты на более понятные значения, предоставляется функцией:

array getdate()

Она возвращает ассоциативный массив, содержащий информацию о дате. Если параметр timestamp не указан, будут возвращены сведения о текущем времени. Этот массив содержит следующие значения:

seconds секунды (0-59)
minutes минуты (0-59)
hours часы (0-23)
mday день месяца (1-31)
wday день недели (0-6), начиная с воскресенья
mon месяц (1-12)
year год
yday день года (0-365)
weekday название дня недели (например, Monday)
month название месяца (например, January)
количество секунд, прошедших с начала Эпохи Unix

Полученный массив, позволяет вывести значения нужном виде:

$date = 1418372345; // исходное дата и время 12.12.2014 11:19:05
$date_mas = getdate($date);
echo $date_mas . ' . ' . $date_mas . ' . ' . $date_mas; // 12.12.2014

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

string date(string $template )

Она предназначена для получения текущей даты unix timestamp в нужном формате. Строковый параметр $template определяет формат вывода. Параметром $unix_timestamp можно задать, с каким значением времени производится работа. Он необязательный, поэтому, если его не указать, будет использоваться текущая дата и время.

Формат задается следующими значениями:

a «до» и «после» полудня: «am» или «pm»
A «до» и «после» полудня заглавными буквами: «AM» или «PM»
d день месяца 2 цифрами (если меньше 10, на первом месте ноль) (от 01 до 31)
D день недели 3 буквами. Например, «Mon» (понедельник)
j день месяца, 1-2 цифры без начальных нулей (от 1 до 31)
F название месяца. Например, «January»
h час, 12-часовой формат (от 01 до 12)
H час, 24-часовой формат (от 00 до 23)
g час, 12-часовой формат без нулей (от 1 до 12)
G час, 24-часовой формат без нулей (от 0 до 23)
i минуты (от 00 до 59)
I (заглавная i) 1, если действует переход на летнее время, иначе 0
L 1, если год високосный, или 0 если не високосный
B время в формате Интернет-времени (альтернативной системы отсчета времени суток) (от 000 до 999)
T временная зона компьютера. Например, MDT
l (строчная L) день недели. Например, «Monday»
m месяц, две цифры с нулями (от 01 до 12)
n месяц, одна-две цифры без нулей (от 1 до 12)
M сокращенное наименование месяца. Например, «Jan»
t число дней в указанном месяце (от 28 до 31)
s секунды (от 0 до 59)
S англоязычный порядковый суффикс числа из двух букв («st», «nd», «rd» или «th»)
U целое число секунд, прошедших с момента начала эпохи UNIX
y год, цифровой, 2 цифры (14)
Y год, цифровой, 4 цифры (2014)
z порядковое число дня в году (от 0 до 365)
Z смешение временной зоны в секундах (от -43200 до 43200)
N порядковый номер дня недели от 1 (понедельник) до 7 (воскресенье) в соответствии со стандартом ISO-8601, (добавлен в версии PHP 5.1.0)
w порядковый номер дня недели от 0 (воскресенье) до 6 (суббота)
W порядковый номер недели года в соответствии со стандартом ISO-8601; недели начинаются с понедельника (добавлено в версии PHP 4.1.0)
o номер года в соответствии со стандартом ISO-8601. Имеет то же значение, что и Y, кроме случая, когда номер недели ISO (W) принадлежит предыдущему или следующему году; тогда будет использован год этой недели. (добавлен в версии PHP 5.1.0)
e код шкалы временной зоны. Например: UTC, GMT, Atlantic/Azores (добавлен в версии PHP 5.1.0)
O разница с временем по Гринвичу, в часах. Например: +0200
P разница с временем по Гринвичу с двоеточием между часами и минутами. Например: +02:00 (добавлено в версии PHP 5.1.3)
c дата в формате стандарта ISO 8601. Например, 2014-12-12T15:19:21+00:00 (добавлено в PHP 5)
r дата в формате » RFC 2822. Например: Thu, 21 Dec 2000 16:01:07 +0200
U количество секунд, прошедших с начала Эпохи Unix (The Unix Epoch, 1 января 1970 00:00:00 GMT)

Как видно из списка, с помощью этой функции можно получить очень много полезных данных о дате. Например:

$date = 1418372345; // исходное дата и время 12.12.2014 11:19:05

echo date('d.m.Y', $date); // 12.12.2014 (дата)
echo date('H:i:s', $date); // 11:19:05 (время)
echo date('H:i', $date); // 11:19 (время)
echo date('t', $date); // 31 (число дней в месяце)
echo date('z', $date); // 345 (порядковый номер дня в году)
echo date('l dS \of F Y h:i:s A', $date); // Friday 12th of December 2014 11:19:05 AM

Другие символы, входящие в шаблон, будут выведены в строке как есть. Если же потребуется ввести символ, который используется в функции как код формата, перед ними вставляется символ «\». Для значения «\n» (символ перехода на новую строку), следует указать «\\n». Таким образом, можно делать вывод целого сообщения, содержащего сведения о дате и времени:

echo date('Сегодня z-й день Y-го года', $date); // Сегодня 345-й день 2014-го года

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

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

from datetime import datetime
import pytz

local = datetime.now()
print("Local:", local.strftime("%m/%d/%Y, %H:%M:%S"))


tz_NY = pytz.timezone('America/New_York') 
datetime_NY = datetime.now(tz_NY)
print("NY:", datetime_NY.strftime("%m/%d/%Y, %H:%M:%S"))

tz_London = pytz.timezone('Europe/London')
datetime_London = datetime.now(tz_London)
print("London:", datetime_London.strftime("%m/%d/%Y, %H:%M:%S"))

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

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

Как конвертировать временные метки в объекты DateTime, используя Strptime ()

Даты могут дать нам много информации, как месяц, год, день, будний день и будь то праздник или нет. Преобразует временную метку в виде строки до Объект, который дает нам много дополнительных функций. Эта функция ожидает строку и формат метки времени.

from datetime import datetime

d = datetime.strptime("21-02-2021 18:46:00", "%d-%m-%Y %H:%M:%S")

Строка 21-02-2021 18:46:00 преобразуется в подходящее Использование указанного формата. Некоторые из самых полезных директив:

  • За день месяца как от нулевой ткани, как 01, 02, 03
  • в течение месяца в качестве нулевого десятичного числа
  • За год с веком как десятичное число
  • 24 часа часы с нулевым значением часа
  • для нулевых минут, а также
  • для нулевых вспомогательных секунд.

Эта коллекция спецификаторов формата достаточно, чтобы вы начали. Для получения дополнительных вариантов вы можете просматривать, связанные с документами Отказ

Как получить текущее значение времени времени

Предположим, вы хотите хранить данные в базу данных с текущим временем времени в качестве ключа. Чтобы получить текущий момент времени, вам просто нужно 1 строку кода:

#Obtain the current timestamp

from datetime import datetime
print(datetime.now())

Как узнать, какой день это

Допустим, нам нужно знать день недели. Мы можем использовать Функция, которая возвращает числовой код на день недели, ноль через шесть, где ноль представляет в понедельник, один представляет вторник, и так далее.

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

Как генерировать список дат с данной даты

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

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

Как работать с объектами TimeDelta

Как указано имя, Объекты представляют длительность времени между двумя датами. Допустим, у нас есть два дата, и нам нужно знать, сколько времени прошло между ними.

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

Что пошло не так? Не хранит ничего внутреннего, кроме дней, секунд и микросекунды, поэтому нам нужно преобразовать их, как показано ниже:

Как получить строковое представление даты от DateTime или Date Objects, используя платье

Если мы распечатаем Сам объект, дата печатается в формате ISO. Использование Мы передаем строку формата для управления строковым представлением даты.

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

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

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

import datetime

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

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

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

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

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

import datetime

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

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

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

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

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

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

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

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

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

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

import datetime

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

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

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

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

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

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

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

Further Reading

Since programming with time can be so complicated, there are many resources on the web to help you learn more about it. Fortunately, this is a problem that many people who work in every programming language have thought about, so you can usually find information or tools to help with any problem you may have. Here’s a selected list of articles and videos that I found helpful in writing this tutorial:

  • Daylight saving time and time zone best practices
  • Storing UTC is not a Silver Bullet
  • How to save datetimes for future events
  • Coding Best Practices Using DateTime in the .NET Framework
  • Computerphile: The Problem with Time & Timezones
  • The Complexity of Time Data Programming

In addition, Paul Ganssle is a core contributor to CPython and the current maintainer of . His articles and videos are a great resource for Python users:

Класс 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)

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

timedeltas

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

datetime_timedelta.py

import datetime

print('microseconds:', datetime.timedelta(microseconds1))
print('milliseconds:', datetime.timedelta(milliseconds1))
print('seconds     :', datetime.timedelta(seconds1))
print('minutes     :', datetime.timedelta(minutes1))
print('hours       :', datetime.timedelta(hours1))
print('days        :', datetime.timedelta(days1))
print('weeks       :', datetime.timedelta(weeks1))

Значения промежуточного уровня, передаваемые конструктору, конвертируются в дни, секунды и микросекунды.

$ python3 datetime_timedelta.py

microseconds: 0:00:00.000001
milliseconds: 0:00:00.001000
seconds     : 0:00:01
minutes     : 0:01:00
hours       : 1:00:00
days        : 1 day, 0:00:00
weeks       : 7 days, 0:00:00

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

datetime_timedelta_total_seconds.py

import datetime

for delta in :
    print('{:15} = {:8} seconds'.format(
        str(delta), delta.total_seconds())
    )

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

$ python3 datetime_timedelta_total_seconds.py

0:00:00.000001  =    1e-06 seconds
0:00:00.001000  =    0.001 seconds
0:00:01         =      1.0 seconds
0:01:00         =     60.0 seconds
1:00:00         =   3600.0 seconds
1 day, 0:00:00  =  86400.0 seconds
7 days, 0:00:00 = 604800.0 seconds

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

Мы можем преобразовать часовой пояс объекта 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 часов.

Get the current Time only

Now Suppose we are just interested in current time of today. How to do that?

As datetime module provides a datetime.time class too. We can get time object from a datetime object i.e.

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

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

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

Output:

9 : 44 : 41 . 921898
09:44:41.921898
timeStr = timeObj.strftime("%H:%M:%S.%f")
09:44:41.921898

datetime.date

Python может представлять даты различными способами. Для начала, рассмотрим формат datetime.date, так как это один из самых простых объектов date.

Python

print( datetime.date(2012, 13, 14) )

Traceback (most recent call last):
File «<string>», line 1, in <fragment>
builtins.ValueError: month must be in 1..12

1
2
3
4
5

print(datetime.date(2012,13,14))

Traceback(most recent call last)

File»<string>»,line1,in<fragment>

builtins.ValueErrormonth must be in1..12

Python

print(datetime.date(2012, 12, 14)) # datetime.date(2012, 12, 14)

1 print(datetime.date(2012,12,14))# datetime.date(2012, 12, 14)

В данном коде показано, как создать простой объект даты. Класс date принимает три аргумента: год, месяц и день. Если вы укажите неправильное значение, вы увидите ошибку ValueError, как в случае выше. В противном случае вы увидите, что объект datetime.date вернулся. Давайте взглянем на еще один пример:

Python

import datetime
d = datetime.date(2012, 12, 14)

print(d.year) # 2012
print(d.day) # 14
print(d.month) # 12

1
2
3
4
5
6

importdatetime

d=datetime.date(2012,12,14)

print(d.year)# 2012

print(d.day)# 14

print(d.month)# 12

Здесь мы присваиваем объекту date переменную d. Теперь мы можем получить доступ к различным компонентам даты по названиям, таким как d.year или d.month. Давайте посмотрим, какой сейчас день:

Python

import datetime

print(datetime.date.today()) # datetime.date(2017, 4, 5)

1
2
3

importdatetime

print(datetime.date.today())# datetime.date(2017, 4, 5)

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

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:

  1. a string representing date and time
  2. 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.

Açıklamalar

NowÖzelliği, DateTime yerel bilgisayardaki geçerli tarih ve saati temsil eden bir değer döndürür.The Now property returns a DateTime value that represents the current date and time on the local computer. DateTime1 Ocak 0001 gece yarısından beri geçen işaret sayısını ve bu değerin dize gösterimini temsil eden bir değer arasında bir farklılık olduğunu unutmayın. Bu, bir DateTime Tarih ve saat değerini kültüre özgü bir biçimde ifade eder.Note that there is a difference between a DateTime value, which represents the number of ticks that have elapsed since midnight of January 1, 0001, and the string representation of that DateTime value, which expresses a date and time value in a culture-specific-specific format. Tarih ve saat değerlerini biçimlendirme hakkında daha fazla bilgi için, bkz ToString . yöntemi.For information on formatting date and time values, see the ToString method. Aşağıdaki örnek, bir dizi kültüre özgü biçimdeki kısa tarih ve saat dizesini görüntüler.The following example displays the short date and time string in a number of culture-specific formats.

Bu özelliğin çözümlenmesi, temel alınan işletim sistemine bağlı olan sistem zamanlayıcıya bağlıdır.The resolution of this property depends on the system timer, which depends on the underlying operating system. 0,5 ile 15 milisaniyelik arasında bir eğilimi gösterir.It tends to be between 0.5 and 15 milliseconds. Sonuç olarak, bir Now döngü içindeki gibi kısa bir zaman aralığındaki özelliğe yinelenen çağrılar aynı değeri döndürebilir.As a result, repeated calls to the Now property in a short time interval, such as in a loop, may return the same value.

NowÖzelliği, performansı ölçmek için sık kullanılır.The Now property is frequently used to measure performance. Ancak, düşük çözünürlüğü nedeniyle, bir sınama aracı olarak kullanım için uygun değildir.However, because of its low resolution, it is not suitable for use as a benchmarking tool. Sınıfı kullanmak daha iyi bir alternatiftir Stopwatch .A better alternative is to use the Stopwatch class.

.NET Framework sürüm 2,0 ‘ den başlayarak, dönüş değeri DateTime Kind özelliğin döndürdüğü bir özelliktir .Starting with the .NET Framework version 2.0, the return value is a DateTime whose Kind property returns .

Not

DateTimeOffset.NowGeçerli yerel tarih ve saati almak için özelliğini de kullanabilirsiniz.You can also use the DateTimeOffset.Now property to retrieve the current local date and time. Yerel bir saatin zaman içinde tek bir nokta olarak ifade etmesine olanak tanır, bu da bu saat değerini bilgisayarlar arasında taşınabilir hale getirir.It allows a local time to be expressed unambiguously as a single point in time, which in turn makes that time value portable across computers.

Doing Arithmetic With Python datetime

Python instances support several types of arithmetic. As you saw earlier, this relies on using instances to represent time intervals. is very useful because it’s built into the Python standard library. Here’s an example of how to work with :

>>>

In this code, you create , which stores the current time, and , which is a of days. Next, you add and to produce a instance one day in the future. Note that working with naive instances, as you are here, means that the attribute of the increments by one and does not account for any repeated or skipped time intervals.

instances also support negative values as the input to the arguments:

>>>

In this example, you provide as the input to , so when you add and , the result is a decrease by one in the attribute.

instances support addition and subtraction as well as positive and negative integers for all arguments. You can even provide a mix of positive and negative arguments. For instance, you might want to add three days and subtract four hours:

>>>

In this example, you add three days and subtract four hours, so the new is at January 29 at 5:37 AM. is very useful in this way, but it’s somewhat limited because it cannot add or subtract intervals larger than a day, such as a month or a year. Fortunately, provides a more powerful replacement called .

The basic syntax of is very similar to . You can provide keyword arguments that produce changes of any number of years, months, days, hours, seconds, or microseconds. You can reproduce the first example with this code:

>>>

In this example, you use instead of to find the corresponding to tomorrow. Now you can try adding five years, one month, and three days to while subtracting four hours and thirty minutes:

>>>

Notice in this example that the date ends up as March 1, 2025. This is because adding three days to would be January 29, and adding one month to that would be February 29, which only exists in a leap year. Since 2025 is not a leap year, the date rolls over to the next month.

You can also use to calculate the difference between two instances. Earlier, you used the subtraction operator to find the difference between two Python instances, and . With , instead of using the subtraction operator, you need to pass the two instances as arguments :

>>>

In this example, you create a new instance for by incrementing the field by one. Then, you use and pass and as the two arguments. then takes the difference between these two instances and returns the result as a instance. In this case, the difference is days, since happens before .

objects have countless other uses. You can use them to find complex calendar information, such as the next year in which October the 13th falls on a Friday or what the date will be on the last Friday of the current month. You can even use them to replace attributes of a instance and create, for example, a one week in the future at 10:00 AM. You can read all about these other uses in the .

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

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

Библиотека datetime не хранит часовые пояса, данные о переводах часов (летнее и зимнее время) и високосных секундах. К тому же, некоторые страны, могут изменить время опираясь на локальные ситуации. Эти ситуации опасны, когда идет запись в базу данных. Для вывода в GUI, можно использовать datetime.datetime.now() или высчитывать часовой пояс из базы.

Для записи в базу данных мы можем использовать время UTC и отдельно считать часовой пояс:

Следующий пример вычислит разницу времени между UTC и локальным. Насколько я знаю он может не сработать на версиях Python < 3.3:

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

 Вывести все часовые пояса мы можем так:

На примере ниже я перевожу локальное время в часовой пояс Киева:

Рекомендую

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

Метод 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 смог проанализировать нашу дату и преобразовать ее в объект даты.

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

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

from datetime import datetime
import pytz

local = datetime.now()
print("Local:", local.strftime("%m/%d/%Y, %H:%M:%S"))


tz_NY = pytz.timezone('America/New_York') 
datetime_NY = datetime.now(tz_NY)
print("NY:", datetime_NY.strftime("%m/%d/%Y, %H:%M:%S"))

tz_London = pytz.timezone('Europe/London')
datetime_London = datetime.now(tz_London)
print("London:", datetime_London.strftime("%m/%d/%Y, %H:%M:%S"))

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

Local time: 2018-12-20 13:10:44.260462
America/New_York time: 2018-12-20 13:10:44.260462
Europe/London time: 2018-12-20 13:10:44.260462	

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

Было полезно224
Нет28

480cookie-checkКак управлять датой и временем в Python?

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

При работе с часовыми поясами обработка даты и времени становится более сложной. Все вышеупомянутые примеры, которые мы обсуждали, являются наивными объектами 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. Вы можете проверить эту страницу Википедии, чтобы найти полный список доступных часовых поясов.

Заключение

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

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

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

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

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

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

Adblock
detector