Mktime преобразовать время


Содержание

Преобразование даты/времени с использованием time.mktime кажется неправильным

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

4 ответа

Короткий ответ: из-за часовых поясов.

Эпоха находится в UTC.

Например, я нахожусь в IST (ирландское стандартное время) или UTC + 1. time.mktime() относительно моего часового пояса, поэтому в моей системе это относится к

Поскольку вы получили результат 1233378000, это будет означать, что вы на 5 часов позади меня

Посмотрите на функцию time.gmtime() , которая работает с UTC.

местное время. Представьте себе, что.

Кстати, мы, кажется, находимся на расстоянии 6 часов:

Ответ Фила на самом деле решил это, но я расскажу немного больше. Поскольку эпоха находится в UTC, если я хочу сравнить другие времена с эпохой, мне нужно также интерпретировать их как UTC.

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

Я могу использовать это, чтобы преобразовать дату в представление «дни-в-эпоху», которое в конечном итоге я получил после.

Интересно. Я не знаю, но я это пробовал:

что и ожидалось. Мое предположение? Возможно, некоторая временная коррекция была выполнена с эпохи. Это может быть всего несколько секунд, что-то вроде високосного года. Я думаю, что раньше я слышал что-то подобное, но не могу точно помнить, как и когда это делается.

mktime, _mktime32, _mktime64 mktime, _mktime32, _mktime64

Преобразуют локальное время в календарное значение. Convert the local time to a calendar value.

Синтаксис Syntax

Параметры Parameters

timeptr timeptr
Указатель на структуру времени; см. asctime. Pointer to time structure; see asctime.

Возвращаемое значение Return Value

_mktime32 возвращает указанное Календарное время, закодированное как значение типа time_t. _mktime32 returns the specified calendar time encoded as a value of type time_t. Если timeptr ссылается на дату до полуночи 1 января 1970, или если не удается представить Календарное время, _mktime32 возвращает-1 приведение к типу time_t. If timeptr references a date before midnight, January 1, 1970, or if the calendar time cannot be represented, _mktime32 returns -1 cast to type time_t. При использовании _mktime32 и если timeptr ссылается на дату после 23:59:59 18 января 2038 г., время в формате UTC, оно возвращает-1 приведение к типу time_t. When using _mktime32 and if timeptr references a date after 23:59:59 January 18, 2038, Coordinated Universal Time (UTC), it will return -1 cast to type time_t.

_mktime64 возвратит-1 Cast к типу __time64_t , если timeptr ссылается на дату после 23:59:59 31 декабря 3000, UTC. _mktime64 will return -1 cast to type __time64_t if timeptr references a date after 23:59:59, December 31, 3000, UTC.

Примечания Remarks

Функции функциях mktime, _mktime32 и _mktime64 преобразуют предоставленную структуру времени (возможно, неполную), на которую указывает timeptr , в полностью определенную структуру с нормализованными значениями, а затем преобразует их в time_t значение календарного времени. The mktime, _mktime32 and _mktime64 functions convert the supplied time structure (possibly incomplete) pointed to by timeptr into a fully defined structure with normalized values and then converts it to a time_t calendar time value. Преобразованное время имеет ту же кодировку, что и значения, возвращаемые функцией time. The converted time has the same encoding as the values returned by the time function. Исходные значения компонентов tm_wday и tm_yday структуры timeptr игнорируются, а исходные значения других компонентов не ограничиваются их нормальными диапазонами. The original values of the tm_wday and tm_yday components of the timeptr structure are ignored, and the original values of the other components are not restricted to their normal ranges.

функциях mktime — это встроенная функция, эквивалентная _mktime64, если не определен _USE_32BIT_TIME_T , в этом случае она эквивалентна _mktime32. mktime is an inline function that is equivalent to _mktime64, unless _USE_32BIT_TIME_T is defined, in which case it is equivalent to _mktime32.

После корректировки в формате UTC _mktime32 обрабатывает даты от полуночи 1 января 1970 г. до 23:59:59 18 января 2038 г. в формате UTC. After an adjustment to UTC, _mktime32 handles dates from midnight, January 1, 1970, to 23:59:59 January 18, 2038, UTC. _mktime64 обрабатывает даты с полуночи 1 января 1970 до 23:59:59, 31 декабря 3000 г. _mktime64 handles dates from midnight, January 1, 1970 to 23:59:59, December 31, 3000. Эта корректировка может привести к тому, что эти функции возвращают значение-1 (приведение к time_t, __time32_t или __time64_t), даже если указанная дата находится в пределах диапазона. This adjustment may cause these functions to return -1 (cast to time_t, __time32_t or __time64_t) even though the date you specify is within range. Например, если вы находитесь в Каире (Египет), часовой пояс которого на два часа раньше UTC, два часа сначала будут вычтены из даты, указанной в timeptr; это может привести к тому, что дата выйдет за пределы диапазона. For example, if you are in Cairo, Egypt, which is two hours ahead of UTC, two hours will first be subtracted from the date you specify in timeptr; this may now put your date out of range.

Эти функции можно использовать для проверки и заполнения структуры времени ™. These functions may be used to validate and fill in a tm structure. В случае успеха эти функции задают значения tm_wday и tm_yday соответствующим образом и устанавливают другие компоненты для представления указанного календарного времени, но со значениями, которые принудительно задаются в нормальных диапазонах. If successful, these functions set the values of tm_wday and tm_yday as appropriate and set the other components to represent the specified calendar time, but with their values forced to the normal ranges. Конечное значение tm_mday не устанавливается до тех пор, пока не будут определены tm_mon и tm_year . The final value of tm_mday is not set until tm_mon and tm_year are determined. При указании времени структуры TM задайте для поля tm_isdst значение: When specifying a tm structure time, set the tm_isdst field to:

нуль (0), чтобы указать, что действует стандартное время; Zero (0) to indicate that standard time is in effect.

значение больше нуля, чтобы указать, что действует переход на зимнее время; A value greater than 0 to indicate that daylight saving time is in effect.

значение меньше нуля, чтобы указать, что код библиотеки времени выполнения языка C должен вычислить, действует ли стандартное время или переход на зимнее время. A value less than zero to have the C run-time library code compute whether standard time or daylight saving time is in effect.

Библиотека времени выполнения языка C определит режим перехода на зимнее время на основе значения переменной среды TZ. The C run-time library will determine the daylight savings time behavior from the TZ environment variable. Если не задано , то вызов Win32 API жеттимезонеинформатион используется для получения сведений о летнем времени из операционной системы. If TZ is not set, the Win32 API call GetTimeZoneInformation is used to get the daylight savings time information from the operating system. В случае сбоя библиотека предполагает, что для реализации вычисления перехода на зимнее время используются правила для США. If this fails, the library assumes the United States’ rules for implementing the calculation of daylight saving time are used. tm_isdst является обязательным полем. tm_isdst is a required field. Если оно не задано, его значение является неопределенным, а возвращаемые значения этих функций — непредсказуемыми. If not set, its value is undefined and the return value from these functions is unpredictable. Если timeptr указывает на структуру TM , возвращенную предыдущим вызовом asctime, gmtimeили localtime (или вариантов этих функций), поле tm_isdst содержит правильное значение. If timeptr points to a tm structure returned by a previous call to asctime, gmtime, or localtime (or variants of these functions), the tm_isdst field contains the correct value.

Илон Маск рекомендует:  Как узнать есть ли в заданном cd rom'е audio cd

Обратите внимание, что gmtime и localtime_gmtime32, _gmtime64, _localtime32и _localtime64) используют один буфер для каждого потока для преобразования. Note that gmtime and localtime (and _gmtime32, _gmtime64, _localtime32, and _localtime64) use a single buffer per thread for the conversion. При указании этого буфера для функциях mktime, _mktime32 или _mktime64предыдущее содержимое уничтожается. If you supply this buffer to mktime, _mktime32 or _mktime64, the previous contents are destroyed.

Эти функции проверяют свои параметры. These functions validate their parameter. Если параметр timeptr является пустым указателем, вызывается обработчик недопустимых параметров, как описано в разделе Проверка параметров. If timeptr is a null pointer, the invalid parameter handler is invoked, as described in Parameter Validation. Если выполнение может быть продолжено, функции возвращают значение-1 и задают значение еинвал. If execution is allowed to continue, the functions return -1 and set errno to EINVAL.

Требования Requirements


Подпрограмма Routine Обязательный заголовок Required header
mktime mktime
_mktime32 _mktime32
_mktime64 _mktime64

Дополнительные сведения о совместимости см. в разделе Совместимость. For additional compatibility information, see Compatibility.

15.3. time — Time access and conversions¶

Although this module is always available, not all functions are available on all platforms. Most of the functions defined in this module call platform C library functions with the same name. It may sometimes be helpful to consult the platform documentation, because the semantics of these functions varies among platforms.

An explanation of some terminology and conventions is in order.

The epoch is the point where the time starts. On January 1st of that year, at 0 hours, the “time since the epoch” is zero. For Unix, the epoch is 1970. To find out what the epoch is, look at gmtime(0) .

The functions in this module do not handle dates and times before the epoch or far in the future. The cut-off point in the future is determined by the C library; for Unix, it is typically in 2038.

Year 2000 (Y2K) issues: Python depends on the platform’s C library, which generally doesn’t have year 2000 issues, since all dates and times are represented internally as seconds since the epoch. Functions accepting a struct_time (see below) generally require a 4-digit year. For backward compatibility, 2-digit years are supported if the module variable accept2dyear is a non-zero integer; this variable is initialized to 1 unless the environment variable PYTHONY2K is set to a non-empty string, in which case it is initialized to 0 . Thus, you can set PYTHONY2K to a non-empty string in the environment to require 4-digit years for all year input. When 2-digit years are accepted, they are converted according to the POSIX or X/Open standard: values 69-99 are mapped to 1969-1999, and values 0–68 are mapped to 2000–2068. Values 100–1899 are always illegal.

UTC is Coordinated Universal Time (formerly known as Greenwich Mean Time, or GMT). The acronym UTC is not a mistake but a compromise between English and French.

DST is Daylight Saving Time, an adjustment of the timezone by (usually) one hour during part of the year. DST rules are magic (determined by local law) and can change from year to year. The C library has a table containing the local rules (often it is read from a system file for flexibility) and is the only source of True Wisdom in this respect.

The precision of the various real-time functions may be less than suggested by the units in which their value or argument is expressed. E.g. on most Unix systems, the clock “ticks” only 50 or 100 times a second.

On the other hand, the precision of time() and sleep() is better than their Unix equivalents: times are expressed as floating point numbers, time() returns the most accurate time available (using Unix gettimeofday() where available), and sleep() will accept a time with a nonzero fraction (Unix select() is used to implement this, where available).

See struct_time for a description of these objects.

Changed in version 2.2: The time value sequence was changed from a tuple to a struct_time , with the addition of attribute names for the fields.

Use the following functions to convert between time representations:

mktime — Возвращает метку времени Unix для заданной даты

(PHP 4, PHP 5, PHP 7)

mktime — Возвращает метку времени Unix для заданной даты

Описание

Функция возвращает метку времени Unix, соответствующую дате и времени, заданным аргументами. Метка времени — это целое число, равное разнице в секундах между заданной датой/временем и началом Эпохи Unix (The Unix Epoch, 1 января 1970 00:00:00 GMT).

Аргументы могут быть опущены в порядке справа налево. В этом случае их значения по умолчанию равны соответствующим компонентам локальной даты/времени.

Примечания

Начиная с версии PHP 5.1, если mktime() вызывается без аргументов, то будет сгенерировано замечание уровня E_STRICT . Используйте вместо этого функцию time() .

Список параметров

Количество часов, прошедших с начала дня, указанного параметрами month , day и year . Отрицательные значения определяют часы до полуночи указанного дня. Значения большие 23 определяют соответствующий час следующего дня (или дней).

Количество минут, прошедших от начала часа, указанного параметром hour . Отрицательные значения определяют минуты предыдущего часа. Значения большие 59 определяют соответствующие минуты следующего часа (или часов).

Количество секунд, прошедших от начала минуты, указанной параметром minute . Отрицательные значения определяют секунды из предыдущей минуты. Значения большие 59 определяют соответствующие секунды следующей минуты (или минут).

Количество месяцев, прошедших с конца предыдущего года. Значения от 1 до 12 определяют нормальные обычные календарные месяцы года. Значения меньшие 1 (включая отрицательные значения) определяют месяца предыдущего года в обратном порядке, т.е. 0 будет декабрем, -1 — ноябрем и т.д. Значения больше 12 определяют соответствующий месяц в следующем году (или годах).

Количество дней, прошедших с конца предыдущего месяца. Значения от 1 до 28, 29, 30 или 31 (в зависимости от месяца) определяют нормальные дни соответствующего месяца. Значения меньшие 1 (включая отрицательные значения) определяют дни предыдущего месяца, таким образом, 0 является последним днем предыдущего месяца, -1 — предпоследним днем предыдущего месяца и т.д. Значения большие количества дней соответствующего месяца определяют соответствующий день следующего месяца (или месяцев).

Номер года, может быть указан двумя или четырьмя цифрами, причем значения между 0-69 будут трактованы как 2000-2069, а между 70-100 — как 1970-2000. На тех системах, где time_t является 32-битным знаковым целым (наиболее распространенный вариант на сегодня), корректный диапазон для параметра year содержит даты где-то между 1901 и 2038. Однако, до версии PHP 5.1.0, на некоторых системах этот диапазон был ограничен датами между 1970 и 2038 (например, Windows).

Данный параметр может быть установлен в 1, если заданной дате соответствует летнее время (DST), 0 в противном случае, или -1 (значение по умолчанию), если неизвестно, действует ли летнее время на заданную дату. В последнем случае PHP пытается определить это самостоятельно. Это можно привести к неожиданному результату (который, тем не менее, не будет неверным). Некоторые даты могут быть неверными, если летнее время применимо к системе, на которой запущен PHP, или параметр is_dst установлен в 1. Если переход на летнее время происходит, например, в 2:00, все даты между 2:00 и 3:00 станут некорректными и mktime() вернет неопределенное (обычно отрицательное) значение. Некоторые системы (например, Solaris 8) осуществляют переход на летнее время в полночь, так что время 0:30 дня, когда был осуществлен переход на летнее время будет обрабатываться как 23:30 предыдущего дня.

Начиная с версии PHP 5.1.0 этот параметр более не рекомендуется к использованию. Вместо этого рекомендуется устанавливать соответствующую временную зону.

Возвращаемые значения

mktime() возвращает временную метку Unix в соответствии с переданными аргументами. Если были переданы некорректными аргументы, функция вернет FALSE (до версии PHP 5.1 возвращалась -1).


Ошибки

Каждый вызов к функциям даты/времени при неправильных настройках временной зоны сгенерирует ошибку уровня E_NOTICE , и/или ошибку уровня E_STRICT или E_WARNING при использовании системных настроек или переменной окружения TZ . Смотрите также date_default_timezone_set()

Список изменений

Теперь ошибки, связанные с временными зонами, генерируют ошибки уровня E_STRICT и E_NOTICE .

Примеры

Пример #1 Пример использования функции mktime()

// Устанавливаем используемую по умолчанию временную зону. Доступно, начиная с версии PHP 5.1
date_default_timezone_set ( ‘UTC’ );

// Выводит: July 1, 2000 is on a Saturday
echo «July 1, 2000 is on a » . date ( «l» , mktime ( 0 , 0 , 0 , 7 , 1 , 2000 ));

// Выводит что-то вроде: 2006-04-05T01:02:03+00:00
echo date ( ‘c’ , mktime ( 1 , 2 , 3 , 4 , 5 , 2006 ));
?>

Пример #2 mktime() example

Функцию mktime() удобно использовать для выполнения арифметических операций с датами, так как она вычисляет верные значения при некорректных аргументах. Например, в следующем примере каждая строка выведет «Jan-01-1998».

Пример #3 Последний день месяца

Последний день любого месяца можно вычислить как «нулевой» день следующего месяца, не -1 день. Оба приведенных ниже примера выведут «Последний день февраля 2000 г.: 29».

Примечания

До версии PHP 5.1.0, отрицательные временные метки не поддерживались ни под одной известной версией Windows, а также и некоторыми другими системами. Таким образом, диапазон корректных лет был ограничен датами от 1970 до 2038 г.

Смотрите также

  • checkdate() — Проверяет корректность даты по григорианскому календарю
  • gmmktime() — Возвращает метку времени Unix для времени по Гринвичу
  • date() — Форматирует вывод системной даты/времени
  • time() — Возвращает текущую метку времени Unix

Модуль time

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

Текущее время в Python

Работа методов из модуля time основывается на общепринятой системе описания времени, которая справедлива для Unix, а также для POSIX-совместимых ОС. Согласно ее концепции, текущее время представляется в виде обыкновенного вещественного значения в секундах, прошедших с момента начала эпохи и до сегодняшнего дня. Отправной точкой для времени считается 1 января 1970 года, когда счетчик секунд имел полностью нулевое значение.

С тех пор это число постоянно растет, позволяя людям работать с различными видами дат в максимально точном представлении. В случае необходимости секунды переводятся в часы, дни, месяцы и годы, предоставляя пользователю удобный вид отображения времени. Чтобы увидеть количество секунд, прошедших с момента начала эпохи, достаточно вызвать метод time(). Но перед этим необходимо подключить модуль time с помощью операции импорта.

Как можно увидеть из данного примера, функция print получает в качестве единственного параметра число, возвращенное из метода time(), после чего выводит его на экран. Таким образом, с 1 января 1970 года прошло уже более полтора миллиарда секунд. Но подобное представление времени совсем неудобно для пользователя программы. Чтобы отобразить текущую дату в более комфортном виде, стоит передать функции print результат работы метода ctime(), не забыв произвести импорт соответствующей ему библиотеки time.

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

Методы

Для работы с временем в стандартной библиотеке языка Python имеется множество самых разных методов. Наиболее популярные функции, реализованные в модуле time, описаны в следующей таблице. Здесь можно найти их название, а также краткую характеристику.

Версия Описание
5.3.0 mktime() теперь выбрасывает ошибку уровня E_DEPRECATED при использовании параметра is_dst .
5.1.0 Параметр is_dst теперь считается устаревшим. Функция теперь возвращает FALSE при ошибке, тогда как раньше возвращалась -1. Теперь функция принимает дату с одновременно установленными в ноль годом, месяцем и днем.
5.1.0 Если mktime() была вызвана без аргументов, то будет сгенерировано замечание уровня E_STRICT . Используйте вместо этого функцию time() .
5.1.0
Метод
Характеристика
time() возвращает текущее время, прошедшее с начала 1970 года в секундах
ctime(s) возвращает местное время в строке или время, полученное из s секунд
clock() возвращает процессорное время, прошедшее с момента первого вызова этой функции, точность больше 1 микросекунды
sleep(s) останавливает ход выполнения программы ровно на s секунд
strftime(s) преобразует переданное в качестве аргумента время s в строку по формату
strptime(s) разбирает строку s и преобразует в объект времени по формату
mktime(s) преобразует время s в количество секунд с начала 1970 года
localtime(s) возвращает объект, представляющий местное время или время s

Форматированный вывод

Принцип работы метода ctime() заключается в представлении секундного вещественного значения в более удобном виде, благодаря автоматическому форматированию. Некоторым пользователям предложенный подобным образом вывод данных может показаться чересчур сложным для восприятия либо же недостаточно информативным. Именно поэтому методы модуля time позволяют создавать свои уникальные типы форматирования для дат. В данном случае речь пойдет о функции strftime, принимающей в качестве параметров текущее время и шаблон, который будет использоваться для форматирования полученного объекта.

В следующем примере демонстрируется вывод значения, переданного функцией localtime() в strftime. То есть, мы в Python получим текущее время и выведем его в отформатированном виде. Первым аргументом метода strftime является строка с некоторым набором правил для форматирования, каждое из которых указано при помощи символа %. В результате, на экране выводится информация, включающая название месяца, число и год.

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

Формат
%a короткое название дня недели
%A полное название дня недели
%b короткое название месяца
%B полное название месяца
%c дата и время
%d день месяца
%H количество часов в 24-часовом формате
%I количество часов в 12-часовом 1формате
%j день года
%m номер месяца
%M количество минут
%p до или после полудня для 12-часового формата
%S количество секунд
%U номер недели в году, начиная с воскресенья
%w номер дня недели
%W номер недели в году, начиная с понедельника
%x дата
%X время
%y год без указания века
%Y полное представление года
%Z название часового пояса
%% символ процента


Применение метода sleep

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

Перевести программу в ждущий режим, временно заморозив ее работу, можно при помощи метода sleep, доступного в модуле time. Его единственным аргументом является количество секунд, которое следует выждать программе, прежде чем перейти к дальнейшему шагу из прописанного алгоритма. В следующем фрагменте кода функция sleep работает 10 секунд.

Как можно увидеть из результатов выполнения кода, вначале на экран выводится стартовое сообщение, после чего программа прекращает свою работу ровно на 10 секунд, поскольку метод sleep получает переменную pause в качестве аргумента. Затем отображается последняя запись, информирующая пользователя о том, какое количество секунд длилась задержка.

Таким образом, чтобы сделать задержку в 100 миллисекунд, надо написать time.sleep(0.1) .

Время выполнения программы

Существует множество разных задач, для решения которых нужно найти время, потраченное на работу программы либо отдельных ее блоков. Чтобы найти данную величину, достаточно посчитать разницу в секундах между точкой старта определенной функции и местом, где она завершает свою работу. В следующем примере демонстрируется применение методов time() для получения текущего времени, чтобы в конечном итоге выявить, как долго работал блок кода. Метод sleep() здесь увеличивает время выполнения программы на 5 секунд.

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

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

monotonic

По этой причине лучше всего использовать метод monotonic(), впервые появившийся в версии Python 3.3 на некоторых платформах, а начиная с выпуска 3.5 ставший доступным абсолютно везде. Его главной особенностью является точное представление измеряемого количества времени, вне зависимости от работы ОС и текущей платформы. Используемый таймер никогда не вернет при повторном вызове метода значение, которое будет меньше предыдущего. Это позволяет избежать многих ошибок, а также неожиданного поведения.

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

Заключение

Используя стандартный библиотечный модуль time в Python 3, можно всячески взаимодействовать с информацией о текущем времени. Таким образом, использование библиотеки дает возможность:

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

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

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

Если вам необходимо преобразовать строку, содержащую дату в формате » Fri, 6 Dec 2002 13:03:56 GMT» (это достаточно распространенный формат, например в HTTP заголовках так пишется дата в полях Last-Modified и Date) то можете воспользоваться следующей функцией:

  1. /* Возвращает time_t для строки в формате: Mon, 07 Apr 2003 12:58:39 GMT */
  2. unsigned long stimegm(char *dt) <
  3. if (!dt) return(0);
  4. char weekday[4],month[4];
  5. unsigned long DD=0,YY=0,MM=0,hh=0,mm=0,ss=0;
  6. sscanf(dt,»%3s, %u %3s %u %u:%u:%u GMT»,&weekday,&DD,&month,&YY,&hh,&mm,&ss);
  7. if (strcmp(month,»Jan»)==0) MM=1;
  8. if (strcmp(month,»Feb»)==0) MM=2;
  9. if (strcmp(month,»Mar»)==0) MM=3;
  10. if (strcmp(month,»Apr»)==0) MM=4;
  11. if (strcmp(month,»May»)==0) MM=5;
  12. if (strcmp(month,»Jun»)==0) MM=6;
  13. if (strcmp(month,»Jul»)==0) MM=7;
  14. if (strcmp(month,»Aug»)==0) MM=8;
  15. if (strcmp(month,»Sep»)==0) MM=9;
  16. if (strcmp(month,»Oct»)==0) MM=10;
  17. if (strcmp(month,»Nov»)==0) MM=11;
  18. if (strcmp(month,»Dec»)==0) MM=12;
  19. // Далее идет код Сергея Сидорина
  20. unsigned long days = ((YY-1970)*(365+365+366+365)+1)/4 + DD — 1;
  21. switch (MM) <
  22. case 2: days += 31; break;
  23. case 3: days += 31+28; break;
  24. case 4: days += 31+28+31; break;
  25. case 5: days += 31+28+31+30; break;
  26. case 6: days += 31+28+31+30+31; break;
  27. case 7: days += 31+28+31+30+31+30; break;
  28. case 8: days += 31+28+31+30+31+30+31; break;
  29. case 9: days += 31+28+31+30+31+30+31+31; break;
  30. case 10: days += 31+28+31+30+31+30+31+31+30; break;
  31. case 11: days += 31+28+31+30+31+30+31+31+30+31; break;
  32. case 12: days += 31+28+31+30+31+30+31+31+30+31+30; break;
  33. >
  34. if ( (MM >= 3) && (YY%4 == 0) )
  35. days ++;
  36. return days*24*3600 + hh*3600 + mm*60 + ss;
  37. >

Download this code:stimegm.cpp

Вообще-то есть три функции, способные заменить эту, но они не доступны во всех операционных системах.

Python 3 – Время. Метод mktime()

Описание

Если входное значение не может быть представлено в качестве допустимого времени, будет увеличено значение OverflowError или ValueError.

Синтаксис

Ниже приведен синтаксис для метода mktime()

Параметры

t – это struct_time или полный 9-кортеж.

Возвращаемое значение

Этот метод возвращает число с плавающей запятой, совместимое с time().

Пример

В следующем примере показано использование метода mktime().


Результат

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Unixtime конвертер и справочник

Что такое Unix время или Unix эпоха (Unix epoch или Unix time или POSIX time или Unix timestamp)?

UNIX-время или POSIX-время (англ. Unix time) — способ кодирования времени, принятый в UNIX и других POSIX-совместимых операционных системах.
Моментом начала отсчёта считается полночь (по UTC) с 31 декабря 1969 года на 1 января 1970, время с этого момента называют «эрой UNIX» (англ. Unix Epoch).
Время UNIX согласуется с UTC, в частности, при объявлении високосных секунд UTC соответствующие номера секунд повторяются.
Способ хранения времени в виде количества секунд очень удобно использовать при сравнении дат (с точностью до секунды), а также для хранения дат: при необходимости их можно преобразовать в любой удобочитаемый формат. Дата и время в этом формате также занимают очень мало места (4 или 8 байтов, в зависимости от размера машинного слова), поэтому его разумно использовать для хранения больших объёмов дат. Недостатки в производительности могут проявиться при очень частом обращении к элементам даты, вроде номера месяца и т. п. Но в большинстве случаев эффективнее хранить время в виде одной величины, а не набора полей.

Timestamp Converter

Convert timestamp to date

Convert date to timestamp

How It Works

Timestamp Online is timestamp converver between unix timestamp and human readable form date. If you want to convert timestamp, it is sufficient to either enter your timestamp into input area, or you can construct URL with your timestamp — http://timestamp.onlinetimestamp/ .

Timestamp Online also supports countdown, so you can see, how much time remains to particular timestamp. URLs for countdowns have following form - http://timestamp.onlinecountdown/ .

Unix Time

Unix time (also known as POSIX time or Epoch time) is a system for describing instants in time, defined as the number of seconds that have elapsed since 00:00:00 Coordinated Universal Time (UTC), Thursday, 1 January 1970, not counting leap seconds. It is used widely in Unix-like and many other operating systems and file formats. Because it does not handle leap seconds, it is neither a linear representation of time nor a true representation of UTC.

Current Timestamp Examples

These examples are showing how to get current unix timestamp in seconds. These examples are returning timestamp in seconds, although some of the languages are returning timestamp in milliseconds.

Current Date and Time Examples

These examples are showing how to get current date and time that could be presented to the end-user.

Timestamp to Date Examples

These examples are showing how to convert timestamp - either in milliseconds or seconds to human readable form.

Date to Timestamp Examples

These examples are showing how to convert date in human readable form to unix timestamp in either milliseconds or seconds.

C ++ - Дата и время

Стандартная библиотека C ++ не предоставляет правильный тип даты. C ++ наследует структуры и функции для обработки дат и времени из C. Чтобы получить доступ к функциям и структурам, связанным с датой и временем, вам нужно будет включить заголовочный файл в вашей программе на C ++.

Существует четыре типа времени: clock_t, time_t, size_t и tm . Типы - clock_t, size_t и time_t могут представлять системное время и дату как некоторое целое число.

Тип структуры tm содержит дату и время в виде структуры C, имеющей следующие элементы:

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

time_t time (time_t * time); Это возвращает текущее время календаря системы в количестве секунд, прошедших с 1 января 1970 года. Если система не имеет времени, возвращается .1.
char * ctime (const time_t * time); Это возвращает указатель на строку формы день месяц год: минуты: секунды год \ n \ 0 .
struct tm * localtime (const time_t * time); Это возвращает указатель на структуру tm, представляющую локальное время.
clock_t clock (void); Это возвращает значение, которое приблизительно соответствует времени, в течение которого вызываемая программа была запущена. Значение, равное .1, возвращается, если время недоступно.
char * asctime (const struct tm * time); Это возвращает указатель на строку, содержащую информацию, хранящуюся в структуре, на которую указывает время, преобразованное в форму: day month date hours: minutes: seconds year \ n \ 0
struct tm * gmtime (const time_t * time); Это возвращает указатель на время в виде структуры tm. Время представлено в скоординированном универсальном времени (UTC), которое по сути является средним временем по Гринвичу (GMT).
time_t mktime (struct tm * time); Это возвращает эквивалент календарного времени времени, найденного в структуре, на которую указывает время.
double difftime (time_t time2, time_t time1); Эта функция вычисляет разницу в секундах между временем 1 и временем 2.
size_t strftime (); Эта функция может использоваться для форматирования даты и времени в определенном формате.

Текущая дата и время

Предположим, вы хотите получить текущую системную дату и время, либо в качестве локального времени, либо в качестве скоординированного универсального времени (UTC). Ниже приведен пример для достижения того же:

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

Формат времени с использованием struct tm

Структура tm очень важна при работе с датой и временем на C или C ++. Эта структура содержит дату и время в виде структуры C, как указано выше. Большинство функций, связанных со временем, используют структуру tm. Ниже приведен пример, который использует различные функции, связанные с датой и временем, и структуру tm -

При использовании структуры в этой главе я исхожу из предположения, что у вас есть базовое понимание структуры C и как получить доступ к членам структуры с помощью оператора arrow -> .

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

Илон Маск рекомендует:  Написание хорошего кода
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL