Datetime.year свойство

Содержание:

What is TimeTuple?

Many of Python’s time functions handle time as a tuple of 9 numbers, as shown below −

Index Field Values
4-digit year 2008
1 Month 1 to 12
2 Day 1 to 31
3 Hour 0 to 23
4 Minute 0 to 59
5 Second 0 to 61 (60 or 61 are leap-seconds)
6 Day of Week 0 to 6 (0 is Monday)
7 Day of year 1 to 366 (Julian day)
8 Daylight savings -1, 0, 1, -1 means library determines DST

The above tuple is equivalent to struct_time structure. This structure has following attributes −

Index Attributes Values
tm_year 2008
1 tm_mon 1 to 12
2 tm_mday 1 to 31
3 tm_hour 0 to 23
4 tm_min 0 to 59
5 tm_sec 0 to 61 (60 or 61 are leap-seconds)
6 tm_wday 0 to 6 (0 is Monday)
7 tm_yday 1 to 366 (Julian day)
8 tm_isdst -1, 0, 1, -1 means library determines DST

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

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

from datetime import datetime

now = datetime.now() # current date and time

year = now.strftime("%Y")
print("year:", year)

month = now.strftime("%m")
print("month:", month)

day = now.strftime("%d")
print("day:", day)

time = now.strftime("%H:%M:%S")
print("time:", time)

date_time = now.strftime("%m/%d/%Y, %H:%M:%S")
print("date and time:",date_time)	

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

year: 2018
month: 12
day: 24
time: 04:59:31
date and time: 12/24/2018, 04:59:31

Здесь год, день, время и date_time ‒ это строки, а now ‒ объект datetime.

Сравнение значений

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

datetime_comparing.py

import datetime
import time

print('Times:')
t1  datetime.time(12, 55, 0)
print('  t1:', t1)
t2  datetime.time(13, 5, 0)
print('  t2:', t2)
print('  t1 < t2:', t1 < t2)

print()
print('Dates:')
d1  datetime.date.today()
print('  d1:', d1)
d2  datetime.date.today() + datetime.timedelta(days1)
print('  d2:', d2)
print('  d1 > d2:', d1 > d2)

Поддерживаются все операторы сравнения.

$ python3 datetime_comparing.py

Times:
  t1: 12:55:00
  t2: 13:05:00
  t1 < t2: True

Dates:
  d1: 2018-12-09
  d2: 2018-12-10
  d1 > d2: False

Форматирование и перевод в строку

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

  • 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 — месяц в виде числа.

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 .

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

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

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

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

datetime Time class

The Python datetime module has the time class, which helps us to work with the time and manipulate them. This example uses the Python time method to return 00:00:00.

datetime module time class output

The Python time class in the datetime module has the following 3 important attributes. 

  • time.min: It returns the earliest or minimum representable time.
  • time.max: Latest or maximum representable time.
  • time.resolution: Smallest possible difference between time.

Output of min, max, resolution functions in datetime time class

Create Time using Python time

Here, we are using the time function to construct or create a time with 10 hours, 22 minutes, and 33 seconds

datetime module time function output to create time

This Python time example is an extension of the above. Here, we are using the microseconds and the argument names as well.

datetime time function output

Python time attributes

This example shows the list of available time attributes in python. Here, hour attribute returns the Hour from a given time, minute, second, and microsecond

datetime time attributes output

Python date time timedelta

The datetime timedelta function predicts or return the past and future dates. In this example, we are returning the date and time after one year and two years before. Refer to Python timedelta.

datetime timedelta function output

Python date time strftime

The datetime strftime function formats the date in the specified format, and return the date as a string. Here, %Y-%m-%d’ means Year-Month-Day (2019-01-31). Refer to Python strftime.

datetime strftime output

Python strptime

The datetime strptime converts the string representation of the date to a regular date and time. Here, datetime.strptime(dt_str, ‘%d %B %Y’) means string date is passes in Day Month_Name Year format. Refer Python strptime.

datetime strptime output

time.sleep

Функция time.sleep дает разработчику возможность приостановить выполнение его скрипта на определенное количество секунд. Это можно сравнить с добавлением функции «Пауза» в вашу программу. Я нашел этот класс особенно полезным, когда мне нужно было подождать несколько секунд, пока закроется файл, или база данных закончит выполнять свою задачу. Давайте взглянем на пример. Откройте новое окно в IDLE и сохраните следующий код:

Python

import time

for x in range(5):
time.sleep(2)
print(«Slept for 2 seconds»)

1
2
3
4
5

importtime

forxinrange(5)

time.sleep(2)

print(«Slept for 2 seconds»)

Теперь запустите этот код в IDLE. Сделав это, вы увидите фразу «Slept for 2 seconds» пять раз, с интервалом в 2 секунды между каждым сообщением. Это очень легко в использовании!

Get the current Date only

Suppose we don’t want complete current timestamp, we are just interested in current date. How to do that ?

datetime class in datetime module consists of  2 other classes i.e date & time class. We can get date object from a datetime object i.e.

dateTimeObj = datetime.now()

# get the date object from datetime object
dateObj = dateTimeObj.date()
# Access the member variables of date object to print
print(dateObj.year, '/', dateObj.month, '/', dateObj.day)

# Print the date object
print(dateObj)

Output:

9 : 37 : 55 . 574360
09:37:55.574360
# Converting date object to string
dateStr = dateObj.strftime("%b %d %Y ")
print(dateStr)

Output:

Nov 18 2018

Класс datetime.timedelta

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

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

from datetime import datetime, date

t1 = date(year = 2018, month = 7, day = 12)
t2 = date(year = 2017, month = 12, day = 23)
t3 = t1 - t2
print("t3 =", t3)

t4 = datetime(year = 2018, month = 7, day = 12, hour = 7, minute = 9, second = 33)
t5 = datetime(year = 2019, month = 6, day = 10, hour = 5, minute = 55, second = 13)
t6 = t4 - t5
print("t6 =", t6)

print("type of t3 =", type(t3)) 
print("type of t6 =", type(t6))  

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

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

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

from datetime import timedelta

t1 = timedelta(weeks = 2, days = 5, hours = 1, seconds = 33)
t2 = timedelta(days = 4, hours = 11, minutes = 4, seconds = 54)
t3 = t1 - t2

print("t3 =", t3)

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

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

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

from datetime import timedelta

t1 = timedelta(seconds = 33)
t2 = timedelta(seconds = 54)
t3 = t1 - t2

print("t3 =", t3)
print("t3 =", abs(t3))

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

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

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

from datetime import timedelta

t = timedelta(days = 5, hours = 1, seconds = 33, microseconds = 233423)
print("total seconds =", t.total_seconds())

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

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

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

Arrow

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

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

import arrow

dt = arrow.get('2018-04-29T17:45:25Z')
print(dt.date())
print(dt.time())
print(dt.tzinfo)

Вывод:

$ python3 arrow-1.py
2018-04-29
17:45:25
tzutc()

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

import arrow

dt = arrow.get('2018-04-29T17:45:25Z').to('America/New_York')
print(dt)
print(dt.date())
print(dt.time())

Вывод:

$ python3 arrow-2.py
2018-04-29T13:45:25-04:00
2018-04-29
13:45:25

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

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

import arrow

date_array = [
    '2018-06-29 08:15:27.243860',
    #'Jun 28 2018 7:40AM',
    #'Jun 28 2018 at 7:40AM',
    #'September 18, 2017, 22:19:55',
    #'Sun, 05/12/1999, 12:30PM',
    #'Mon, 21 March, 2015',
    '2018-03-12T10:12:45Z',
    '2018-06-29 17:08:00.586525+00:00',
    '2018-06-29 17:08:00.586525+05:00',
    #'Tuesday , 6th September, 2017 at 4:30pm'
]

for date in date_array:
    dt = arrow.get(date)
    print('Parsing: ' + date)
    print(dt)
    print(dt.date())
    print(dt.time())
    print(dt.tzinfo)

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

$ python3 arrow-3.py
Parsing: 2018-06-29 08:15:27.243860
2018-06-29T08:15:27.243860+00:00
2018-06-29
08:15:27.243860
tzutc()

Parsing: 2018-03-12T10:12:45Z
2018-03-12T10:12:45+00:00
2018-03-12
10:12:45
tzutc()

Parsing: 2018-06-29 17:08:00.586525+00:00
2018-06-29T17:08:00.586525+00:00
2018-06-29
17:08:00.586525
tzoffset(None, 0)

Parsing: 2018-06-29 17:08:00.586525+05:00
2018-06-29T17:08:00.586525+05:00
2018-06-29
17:08:00.586525
tzoffset(None, 18000)

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

Описание типа данных datetime

Property (Свойство) Значение
Синтаксис datetime
Использование DECLARE @MyDatetime datetime CREATE TABLE Таблица1 ( Столбец1 datetime )
Форматы строковых литералов по умолчанию (используется для клиента нижнего уровня) Неприменимо
Диапазон даты С я января 1753 года до 31 декабря 9999 года
Диапазон времени От 00:00:00 до 23:59:590,997
Диапазон смещения часового пояса None
Диапазоны элементов ГГГГ — четырехзначное число от 1753 до 9999, представляющее год. ММ обозначает 2 цифры, которые представляют месяц и принимают значения от 01 до 12. Обозначение ДД состоит из двух цифр, представляющих день указанного месяца, и принимает значения от 01 до 31 в зависимости от месяца. Обозначение чч состоит из двух цифр, представляющих час, и принимает значения от 00 до 23. Обозначение мм состоит из двух цифр, представляющих минуту, и принимает значения от 00 до 59. Обозначение сс состоит из двух цифр, представляющих секунду, и принимает значения от 00 до 59. Обозначение n* может содержать от нуля до трех цифр, представляющих доли секунды, и принимает значения от 0 до 999.
Длина в символах Минимально 19 позиций, максимально — 23
Объем памяти 8 байт
Точность Округлено до приращения 0,000, 0,003 или 0,007 секунд
Значение по умолчанию 1900-01-01 00:00:00
Календарь Григорианский (включает полный диапазон лет)
Определяемая пользователем точность в долях секунды Нет
Учет и сохранение смещения часового пояса Нет
Учет перехода на летнее время Нет

Форматирование и анализ

Строковое представление объекта datetime по умолчанию использует формат ISO-8601 (). Альтернативные форматы можно создать с помощью .

datetime_datetime_strptime.py

import datetime

format  "%a %b %d %H:%M:%S %Y"

today  datetime.datetime.today()
print('ISO     :', today)

s  today.strftime(format)
print('strftime:', s)

d  datetime.datetime.strptime(s, format)
print('strptime:', d.strftime(format))

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

$ python3 datetime_datetime_strptime.py

ISO     : 2018-12-09 10:46:30.598115
strftime: Sun Dec 09 10:46:30 2018
strptime: Sun Dec 09 10:46:30 2018

Те же коды форматирования можно использовать с Python, поместив их после < code>: в спецификации поля строки формата.

datetime_format.py

import datetime

today  datetime.datetime.today()
print('ISO     :', today)
print('format(): {:%a %b %d %H:%M:%S %Y}'.format(today))

Каждый код формата datetime должен по-прежнему иметь префикс , а последующие двоеточия рассматриваются как буквальные символы для включения в вывод.

$ python3 datetime_format.py

ISO     : 2018-12-09 10:46:30.659964
format(): Sun Dec 09 10:46:30 2018

В следующей таблице показаны все коды форматирования для 17:00 13 января 2016 г. в часовом поясе США и Востока.

коды формата strptime/strftime

Символ

Смысл

Пример

% a

Сокращенное название дня недели

‘Мы бы’

% А

Полное название дня недели

‘Среда’

% w

Номер дня недели – от 0 (воскресенье) до 6 (суббота)

‘3’

% d

День месяца (с нулями)

’13’

% b

Сокращенное название месяца

“Ян”

% B

Полное название месяца

‘Январь’

% m

Месяц в году

’01’

% y

Год без века

’16’

% Y

Год с веком

‘2016’

%ЧАС

Час в 24-часовом формате

’17’

Час из 12-часового формата

’05’

%п

ДО ПОЛУДНЯ ПОСЛЕ ПОЛУДНЯ

‘ВЕЧЕРА’

% M

Минуты

’00’

% S

Секунды

’00’

% f

Микросекунды

“000000”

% z

Смещение UTC для объектов с учетом часовых поясов

‘-0500’

% Z

Название часового пояса

‘СТАНДАРТНОЕ ВОСТОЧНОЕ ВРЕМЯ’

% j

День года

‘013’

% W

Неделя года

’02’

% c

Представление даты и времени для текущего языкового стандарта

‘Мы бы

Янв

13

17:00:00

2016 ‘

%Икс

Представление даты для текущего языкового стандарта

’01/13/16′

%ИКС

Представление времени для текущего языкового стандарта

’17: 00: 00 ‘

%%

Буквальный

персонаж

‘%’

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

Модуль 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.

Benchmarking

If we want a reliable benchmark of CPU-hungry function, we should be careful.

For instance, let’s measure two functions that calculate the difference between two dates: which one is faster?

Such performance measurements are often called “benchmarks”.

These two do exactly the same thing, but one of them uses an explicit to get the date in ms, and the other one relies on a date-to-number transform. Their result is always the same.

So, which one is faster?

The first idea may be to run them many times in a row and measure the time difference. For our case, functions are very simple, so we have to do it at least 100000 times.

Let’s measure:

Wow! Using is so much faster! That’s because there’s no type conversion, it is much easier for engines to optimize.

Okay, we have something. But that’s not a good benchmark yet.

Imagine that at the time of running CPU was doing something in parallel, and it was taking resources. And by the time of running that work has finished.

A pretty real scenario for a modern multi-process OS.

As a result, the first benchmark will have less CPU resources than the second. That may lead to wrong results.

For more reliable benchmarking, the whole pack of benchmarks should be rerun multiple times.

For example, like this:

Modern JavaScript engines start applying advanced optimizations only to “hot code” that executes many times (no need to optimize rarely executed things). So, in the example above, first executions are not well-optimized. We may want to add a heat-up run:

Be careful doing microbenchmarking

Modern JavaScript engines perform many optimizations. They may tweak results of “artificial tests” compared to “normal usage”, especially when we benchmark something very small, such as how an operator works, or a built-in function. So if you seriously want to understand performance, then please study how the JavaScript engine works. And then you probably won’t need microbenchmarks at all.

The great pack of articles about V8 can be found at http://mrale.ph.

Форматирование даты с помощью strftime()

from datetime import datetime

# current date and time
now = datetime.now()

t = now.strftime("%H:%M:%S")
print("time:", t)

s1 = now.strftime("%m/%d/%Y, %H:%M:%S")
# mm/dd/YY H:M:S format
print("s1:", s1)

s2 = now.strftime("%d/%m/%Y, %H:%M:%S")
# dd/mm/YY H:M:S format
print("s2:", s2)

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

time: 04:34:52
s1: 12/26/2018, 04:34:52
s2: 26/12/2018, 04:34:52

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

В приведенной выше программе t  s1 и s2 -‒ это строки:

  • % Y — год
  • % m — месяц
  • % d — день
  • % H — час [00, 01, …, 22, 23
  • % M — минута
  • % S — секунда

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

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

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

datetime_timezone.py

import datetime

min6  datetime.timezone(datetime.timedelta(hours6))
plus6  datetime.timezone(datetime.timedelta(hours6))
d  datetime.datetime.now(min6)

print(min6, ':', d)
print(datetime.timezone.utc, ':',
      d.astimezone(datetime.timezone.utc))
print(plus6, ':', d.astimezone(plus6))

# convert to the current system timezone
d_system  d.astimezone()
print(d_system.tzinfo, '      :', d_system)

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

$ python3 datetime_timezone.py

UTC-06:00 : 2018-12-09 09:46:30.709455-06:00
UTC : 2018-12-09 15:46:30.709455+00:00
UTC+06:00 : 2018-12-09 21:46:30.709455+06:00
EST       : 2018-12-09 10:46:30.709455-05:00

Примечание

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

Точность

в Python может обрабатывать дельты примерно +/- 2,7 миллиона лет. Тем не менее, охватывает только диапазон около 10000 лет. Чтобы сохранить большую временную дельту в дате и времени, вам придется сделать некоторые изменения и пожертвовать некоторой точностью.

Приведенный выше подход ограничивает временные интервалы до половины этого диапазона — около +/- 5000 лет из-за выбора эталонной даты и времени.

Если вы знаете, что ваша временная дельта всегда будет положительной, вы можете использовать (или, если вы знаете, что она всегда будет отрицательной, вы можете использовать ), чтобы получить полный диапазон около 10000 лет.

Преобразование данных типа Date и Time

При преобразовании в типы данных даты и времени SQL Server отбрасывает все значения, которые не распознаются как значения даты или времени. Сведения об использовании функций CAST и CONVERT c данными типов даты и времени см. в статье Функции CAST и CONVERT (Transact-SQL).

Преобразование других типов даты и времени в тип данных datetime

В этом разделе описывается, что происходит при преобразовании других типов даты и времени в тип данных datetime.

При преобразовании из типа date копируются год, месяц и день. Для компонента времени устанавливается значение 00:00:00.000. Следующий код демонстрирует результаты преобразования значения в значение .

При преобразовании из time(n) компонент времени копируется, а для компонента даты устанавливается значение 1900-01-01. Если точность в долях секунды значения time(n) больше трех цифр, значение будет усечено. Следующий пример показывает результаты преобразования значения в значение .

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

При преобразовании из типа datetimeoffset(n) копируются компоненты даты и времени. Часовой пояс усекается. Если точность в долях секунды для значения datetimeoffset(n) превышает три разряда, значение будет усечено. Следующий пример показывает результаты преобразования значения в значение .

При преобразовании из типа datetime2(n) копируются дата и время. Если точность в долях секунды для значения datetime2(n) превышает три разряда, значение будет усечено. Следующий пример показывает результаты преобразования значения в значение .

ValueError

Если строка (первый аргумент) и код формата (второй аргумент), не совпадают, вы получите ValueError. Например:

from datetime import datetime

date_string = "12/11/2018"
date_object = datetime.strptime(date_string, "%d %m %Y")

print("date_object =", date_object)

Если вы запустите эту программу, вы получите ошибку:

ValueError: time data '12/11/2018' does not match format '%d %m %Y'

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

Метод strftime() возвращает строку, представляющую дату и время, используя объект date, time или datetime.

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

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