Время высокой точности: как работать с долями секунды в mysql и php

Date and Time Functions

dd>

Returns the current date as of the start of the query.


Returns the current time as of the start of the query.

Returns the current timestamp as of the start of the query.

() → varchar

Returns the current time zone in the format defined by IANA (e.g., ) or as fixed offset from UTC (e.g., )

(x) → date

This is an alias for .

(string) → timestamp with time zone

Parses the ISO 8601 formatted into a .

(string) → date

Parses the ISO 8601 formatted into a .

(unixtime) → timestamp

Returns the UNIX timestamp as a timestamp.

(unixtime, string) → timestamp with time zone

Returns the UNIX timestamp as a timestamp with time zone using for the time zone.

(unixtime, hours, minutes) → timestamp with time zone

Returns the UNIX timestamp as a timestamp with time zone using and for the time zone offset.

Returns the current time as of the start of the query.

Returns the current timestamp as of the start of the query.

() → timestamp with time zone

This is an alias for .

(x) → varchar

Formats as an ISO 8601 string. can be date, timestamp, or timestamp with time zone.

(interval) → bigint

Returns the day-to-second as milliseconds.

(timestamp) → double

Returns as a UNIX timestamp.

Convenience Extraction Functions

(x) → bigint

Returns the day of the month from .

(x) → bigint

This is an alias for .

(x) → bigint

Returns the ISO day of the week from . The value ranges from (Monday) to (Sunday).

(x) → bigint

Returns the day of the year from . The value ranges from to .

(x) → bigint

This is an alias for .

(x) → bigint

This is an alias for .

(x) → bigint

Returns the hour of the day from . The value ranges from to .

(x) → bigint

Returns the millisecond of the second from .

(x) → bigint

Returns the minute of the hour from .

(x) → bigint

Returns the month of the year from .

(x) → bigint

Returns the quarter of the year from . The value ranges from to .

(x) → bigint

Returns the second of the minute from .

(timestamp) → bigint

Returns the hour of the time zone offset from .

(timestamp) → bigint

Returns the minute of the time zone offset from .

(x) → bigint

Returns the ISO week of the year from . The value ranges from to .

(x) → bigint

This is an alias for .

(x) → bigint

Returns the year from .

(x) → bigint

Returns the year of the ISO week from .

(x) → bigint

This is an alias for .

Конвертируем строку с датой в UNIX Timestamp

Мы уже знаем как превратить строку с датой в экземпляр Time из предыдущей строки. Мы воспользуемся этими знаниями и превратим строку даты в UNIX timestamp. В примере ниже, мы узнаем сколько секунд прошло от 1 Января 1970 года до 1 января 2020 года.

Go

package main

import ( «fmt» «time» )

func main() { var first_january = «01/01/2020» var date_layout = «02/01/2006» tTime, _ := time.Parse(date_layout, first_january) fmt.Printf(«%s в UNIX: %d\n», first_january, tTime.Unix()) }

1 2 3 4 5 6 7 8 9 10 11 12 13 14

packagemain

import(

«fmt»

«time»

)  

funcmain(){

varfirst_january=»01/01/2020″

vardate_layout=»02/01/2006″

tTime,_=time.Parse(date_layout,first_january)

fmt.Printf(«%s в UNIX: %d\n»,first_january,tTime.Unix())

}

Результат:

Shell

01/01/2020 в UNIX: 1577836800

1 01012020вUNIX1577836800

История

Идея использования временно́й печати (перевод автора «timestamping») информации актуальна довольно давно. Например, когда Роберт Гук открыл свой закон в 1660 году, он не хотел его публиковать, но хотел иметь право на авторство. Поэтому он сначала выпустил анаграмму ceiiinosssttuv и позднее опубликовал перевод ut tensio sic vis (лат: упругость, как сила). Похожая ситуация случилась с Галилеем, в его исследованиях фаз Венеры сперва была опубликована анаграмма.

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

Доверие электронной отметке времени

Получения временной метки (timestamp) от доверенного третьего лица.

Электронная отметка — это способ достоверно следить за временем создания и модификации документа. «Достоверно» здесь значит, что никто, даже владелец этого документа, не в состоянии изменить однажды созданную информацию так, чтоб её целостность не нарушилась. Административная сторона включает прозрачную сборку управления отметками времени, их создание и обновление.

Защищённая отметка времени — это отметка, выданная при свидетелях. Trusted third party (TTP) ведёт себя как timestamping authority (TSA). Это используется для подтверждения существования определённых данных до определённого момента времени (контракты, данные исследования, медицинские записи и т. п.) без возможности дописывания задним числом. Сложные TSA могут использоваться для повышения надёжности и уменьшения уязвимости.

Создание временной метки

При цифровой подписи — timestamp ссылается на time code или digitally signed timestamp, которые предназначены для подтверждения существования определённого документа в определённое время

Эта техника основана на цифровых подписях и хеш-функциях. Сначала хеш вычисляется из данных. Хеш — своего рода цифровая контрольная сумма файла оригинальных данных: другая строка битов для установленных данных. Если оригинальные данные были изменены, то получится уже полностью другой хеш. Этот хеш посылается TSA, TSA генерирует timestamp для хеша и вычисляет хеш этого объединения. Этот хеш, например, может быть подписан в цифровой форме с приватным ключом TSA. Этот подписанный хеш и timestamp возвращаются на подписанную сторону timestamp, который хранит их с оригинальными данными (см. диаграмму).

Впоследствии оригинальные данные не могут быть вычислены из хеша (поскольку хеш-функция является функцией в одну сторону (необратимой)), TSA никогда не видит оригинальные данные, которые допускается использовать в этом методе для конфиденциальных данных.

Проверка временной метки

Проверка временной метки, сгенерированной TSA.

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

Затем проверяется цифровая подпись TSA путём дешифрования подписанного хеша, полученного от TSA, с помощью открытого ключа TSA. В результате получается дешифрованный хеш, который назовём хешем B. Если хеш A идентичен хешу B, значит, электронная отметка времени не подвергалась изменениям и была выпущена TSA. Если хеши не совпадают, можно утверждать, что либо электронная отметка времени была изменена, либо она не была выпущена TSA.

Зачем использовать калькулятор времени Unix epoch онлайн?

Формат времени UNIX, при котором отсутствуют годы, месяцы, дни, часы, минуты, а отображаются только секунды, на первый взгляд кажется неудобным. Однако точное время в Unix epoch тоже может быть полезным для нескольких целей:

  • программисты, работающие с датами, могут упростить себе жизнь, используя формат UNIX;
  • конвертируя время в Unix epoch, можно договариваться о встрече с друзьями, не боясь, что кто-то посторонний об этом узнает – поиграйте в шпионов;
  • чтобы взаимодействовать с веб-мастерами, операционными системами, другими языками программирования и базами данных;
  • для хранения большого массива дат, чтобы информация не занимала много места.

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

Выбор типа данных

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

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

Также могут действовать и другие факторы:

Используйте в тех ситуациях, в которых необходимо сохранить совместимость с существующим приложением, написанным до появления типов данных . В общем случае рекомендуется использовать в коде PL/SQL типы данных, соответствующие типам используемых таблиц базы данных (или по крайней мере совместимые с ними). Например, дважды подумайте, прежде чем читать значение из таблицы в переменную , потому что это может привести к потере информации (в данном случае — долей секунд, и возможно, часового пояса). Если вы работаете с версией старше Oracle9i Database, у вас нет выбора — придется использовать . При сложении и вычитании годов и месяцев поведение функции , работающей со значениями типа , отличается от поведения интервальных арифметических операций с типами

За дополнительной информацией по этому важному, но неочевидному вопросу обращайтесь к разделу «Когда используются типы »

Будьте осторожны при совместном использовании типов данных и . Правила арифметических операций для этих типов сильно различаются. Будьте внимательны при использовании традиционных встроенных функций даты Oracle (таких, как или ) к значениям типов . См. далее раздел «Арифметические операции над значениями даты/времени».

Вас заинтересует / Intresting for you:

Управление приложениями PL/SQL… 2157 просмотров Rasen Fasenger Thu, 16 Jul 2020, 06:20:48

Встроенные методы коллекций PL… 4370 просмотров sepia Tue, 29 Oct 2019, 09:54:01

Тип данных RAW в PL/SQL 3549 просмотров Doctor Thu, 12 Jul 2018, 08:41:33

Символьные функции и аргументы… 7348 просмотров Анатолий Wed, 23 May 2018, 18:54:01

Author: Дэн

Другие статьи автора:

MySQL date format specifiers

Specifier  Description
%a Abbreviated weekday name (Sun..Sat)
%b Abbreviated month name (Jan..Dec)
%c Month, numeric (0..12)
%D Day of the month with English suffix (0th, 1st, 2nd, 3rd, …)
%d Day of the month, numeric (00..31)
%e Day of the month, numeric (0..31)
%f Microseconds (000000..999999)
%H Hour (00..23)
%h Hour (01..12)
%I Hour (01..12)
%i Minutes, numeric (00..59)
%j Day of year (001..366)
%k Hour (0..23)
%l Hour (1..12)
%M Month name (January..December)
%m Month, numeric (00..12)
%p AM or PM
%r Time, 12-hour (hh:mm:ss followed by AM or PM)
%S Seconds (00..59)
%s Seconds (00..59)
%T Time, 24-hour (hh:mm:ss)
%U Week (00..53), where Sunday is the first day of the week
%u Week (00..53), where Monday is the first day of the week
%V Week (01..53), where Sunday is the first day of the week; used with %X
%v Week (01..53), where Monday is the first day of the week; used with %x
%W Weekday name (Sunday..Saturday)
%w Day of the week (0=Sunday..6=Saturday)
%X Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V
%x Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v
%Y Year, numeric, four digits
%y Year, numeric (two digits)
%% A literal ‘%’ character

Когда стоит использовать время высокой точности?


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

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

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

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

Вы хотите замерить время между какими-то операциями. Тут всё очень просто: чем выше точность меток времени на границах интервала, тем выше точность результата. Если вы используете целые секунды, то можете ошибиться на 1 секунду (при попадании на границы секунд). Если же использовать шесть знаков после запятой, то ошибка будет на шесть порядков ниже. У вас есть коллекция, где велика вероятность наличия нескольких объектов с одинаковым временем создания. Примером может служить знакомый всем чат, где список контактов отсортирован по времени последнего сообщения. Если там появляется постраничная навигация, то возникает даже риск потери контактов на границах страниц. Эту проблему можно решить и без времени высокой точности за счёт сортировки и постраничного разбиения по паре полей (время + уникальный идентификатор объекта), но у этого решения есть свои недостатки (как минимум усложнение SQL-запросов, но не только это). Увеличение точности времени поможет снизить вероятность появления проблем и обойтись без усложнения системы. Вам нужно хранить историю изменений какого-то объекта

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

д.).

Нужно иметь в виду, что нельзя верить полученным значениям на 100% и реальная точность получаемых значений может быть меньше шести знаков после запятой. Это происходит из-за того, что мы можем получить неточное значение времени (особенно при работе в распределённой системе, состоящей из многих серверов), время может неожиданно измениться (например, при синхронизации через NTP или при переводе часов) и т. д. Я не стану здесь останавливаться на всех этих проблемах, но приведу пару статей, где про них можно почитать подробнее:

  • «Заблуждения программистов относительно времени» (сама статья очень минималистична, но в дополнение к тезисам из текста можно найти пояснения в комментариях);
  • «Тяжёлое бремя времени».

Объявление переменных даты и времени в PL/SQL

Синтаксис объявления переменной, представляющей дату и время, выглядит так:

имя_переменной  тип  

Поле тип заменяется одним из следующих типов:

DATE
TIMESTAMP 
TIMESTAMP  WITH TIME ZONE
TIMESTAMP  WITH LOCAL TIME ZONE 

Значение параметра точность определяет количество десятичных цифр, выделяемое для хранения долей секунды. По умолчанию оно равно 6, то есть время может отслеживаться с точностью до 0,000001 секунды. Допускаются значения от 0 до 9, позволяющие сохранять время суток с высокой точностью.

Функции, возвращающие значения типа (например, ), всегда возвращают данные с шестью цифрами точности.

Несколько примеров объявлений: 

DECLARE
hire_date TIMESTAMP (0) WITH TIME ZONE;
todays_date CONSTANT DATE := SYSDATE;
pay_date TIMESTAMP DEFAULT TO_TIMESTAMP('20050204','YYYYMMDD');
BEGIN
NULL;
END;
/

Исходное_значение задается либо при помощи функции преобразования (например, ), либо с использованием литерала даты/времени. Оба варианта описаны далее в разделе «Преобразования даты и времени».

Поведение переменной типа идентично поведению переменной типа .

Examples

SELECT FROM_UNIXTIME(1196440219);
+---------------------------+
| FROM_UNIXTIME(1196440219) |
+---------------------------+
| 2007-11-30 113019       |
+---------------------------+

SELECT FROM_UNIXTIME(1196440219) + ;
+-------------------------------+
| FROM_UNIXTIME(1196440219) +  |
+-------------------------------+
|         20071130113019.000000 |
+-------------------------------+

SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %D %M %h:%i:%s %x');
+---------------------------------------------------------+
| FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %D %M %h:%i:%s %x') |
+---------------------------------------------------------+
| 2010 27th March 010347 2010                           |
+---------------------------------------------------------+

SQL Учебник

SQL ГлавнаяSQL ВведениеSQL СинтаксисSQL SELECTSQL SELECT DISTINCTSQL WHERESQL AND, OR, NOTSQL ORDER BYSQL INSERT INTOSQL Значение NullSQL Инструкция UPDATESQL Инструкция DELETESQL SELECT TOPSQL MIN() и MAX()SQL COUNT(), AVG() и …SQL Оператор LIKESQL ПодстановочныйSQL Оператор INSQL Оператор BETWEENSQL ПсевдонимыSQL JOINSQL JOIN ВнутриSQL JOIN СлеваSQL JOIN СправаSQL JOIN ПолноеSQL JOIN СамSQL Оператор UNIONSQL GROUP BYSQL HAVINGSQL Оператор ExistsSQL Операторы Any, AllSQL SELECT INTOSQL INSERT INTO SELECTSQL Инструкция CASESQL Функции NULLSQL ХранимаяSQL Комментарии

See the full DST (Daylight Saving Time) transition history for every timezone

also applies any necessary DST changes based on the rules in the above tables and the date that you use.

Note: According to the docs, the value you set for time_zone does not change, if you set it as «+01:00» for example, then the time_zone will be set as an offset from UTC, which does not follow DST, so it will stay the same all year round.

Only the named timezones will change time during daylight savings time.

Abbreviations like will always be a winter time and will be summer time while +01:00 will always be time + 1 hour and both won’t change with DST.

The timezone will be the timezone of the host machine where mysql is installed (unless mysql fails to determine it)

You can read more about working with DST here

related questions:

  • How do I set the time zone of MySQL?
  • MySql — SELECT TimeStamp Column in UTC format
  • How to get Unix timestamp in MySQL from UTC time?
  • Converting Server MySQL TimeStamp To UTC
  • https://dba.stackexchange.com/questions/20217/mysql-set-utc-time-as-default-timestamp
  • How do I get the current time zone of MySQL?
  • MySQL datetime fields and daylight savings time — how do I reference the «extra» hour?
  • Converting negative values from FROM_UNIXTIME

Sources:

SQL References

SQL Keywords ADD ADD CONSTRAINT ALTER ALTER COLUMN ALTER TABLE ALL AND ANY AS ASC BACKUP DATABASE BETWEEN CASE CHECK COLUMN CONSTRAINT CREATE CREATE DATABASE CREATE INDEX CREATE OR REPLACE VIEW CREATE TABLE CREATE PROCEDURE CREATE UNIQUE INDEX CREATE VIEW DATABASE DEFAULT DELETE DESC DISTINCT DROP DROP COLUMN DROP CONSTRAINT DROP DATABASE DROP DEFAULT DROP INDEX DROP TABLE DROP VIEW EXEC EXISTS FOREIGN KEY FROM FULL OUTER JOIN GROUP BY HAVING IN INDEX INNER JOIN INSERT INTO INSERT INTO SELECT IS NULL IS NOT NULL JOIN LEFT JOIN LIKE LIMIT NOT NOT NULL OR ORDER BY OUTER JOIN PRIMARY KEY PROCEDURE RIGHT JOIN ROWNUM SELECT SELECT DISTINCT SELECT INTO SELECT TOP SET TABLE TOP TRUNCATE TABLE UNION UNION ALL UNIQUE UPDATE VALUES VIEW WHERE

MySQL Functions String Functions ASCII CHAR_LENGTH CHARACTER_LENGTH CONCAT CONCAT_WS FIELD FIND_IN_SET FORMAT INSERT INSTR LCASE LEFT LENGTH LOCATE LOWER LPAD LTRIM MID POSITION REPEAT REPLACE REVERSE RIGHT RPAD RTRIM SPACE STRCMP SUBSTR SUBSTRING SUBSTRING_INDEX TRIM UCASE UPPER

Numeric Functions ABS ACOS ASIN ATAN ATAN2 AVG CEIL CEILING COS COT COUNT DEGREES DIV EXP FLOOR GREATEST LEAST LN LOG LOG10 LOG2 MAX MIN MOD PI POW POWER RADIANS RAND ROUND SIGN SIN SQRT SUM TAN TRUNCATE

Date Functions ADDDATE ADDTIME CURDATE CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURTIME DATE DATEDIFF DATE_ADD DATE_FORMAT DATE_SUB DAY DAYNAME DAYOFMONTH DAYOFWEEK DAYOFYEAR EXTRACT FROM_DAYS HOUR LAST_DAY LOCALTIME LOCALTIMESTAMP MAKEDATE MAKETIME MICROSECOND MINUTE MONTH MONTHNAME NOW PERIOD_ADD PERIOD_DIFF QUARTER SECOND SEC_TO_TIME STR_TO_DATE SUBDATE SUBTIME SYSDATE TIME TIME_FORMAT TIME_TO_SEC TIMEDIFF TIMESTAMP TO_DAYS WEEK WEEKDAY WEEKOFYEAR YEAR YEARWEEK

Advanced Functions BIN BINARY CASE CAST COALESCE CONNECTION_ID CONV CONVERT CURRENT_USER DATABASE IF IFNULL ISNULL LAST_INSERT_ID NULLIF SESSION_USER SYSTEM_USER USER VERSION

SQL Server Functions String Functions ASCII CHAR CHARINDEX CONCAT Concat with + CONCAT_WS DATALENGTH DIFFERENCE FORMAT LEFT LEN LOWER LTRIM NCHAR PATINDEX QUOTENAME REPLACE REPLICATE REVERSE RIGHT RTRIM SOUNDEX SPACE STR STUFF SUBSTRING TRANSLATE TRIM UNICODE UPPER

Numeric Functions ABS ACOS ASIN ATAN ATN2 AVG CEILING COUNT COS COT DEGREES EXP FLOOR LOG LOG10 MAX MIN PI POWER RADIANS RAND ROUND SIGN SIN SQRT SQUARE SUM TAN

Date Functions CURRENT_TIMESTAMP DATEADD DATEDIFF DATEFROMPARTS DATENAME DATEPART DAY GETDATE GETUTCDATE ISDATE MONTH SYSDATETIME YEAR

Advanced Functions CAST COALESCE CONVERT CURRENT_USER IIF ISNULL ISNUMERIC NULLIF SESSION_USER SESSIONPROPERTY SYSTEM_USER USER_NAME

MS Access Functions String Functions Asc Chr Concat with & CurDir Format InStr InstrRev LCase Left Len LTrim Mid Replace Right RTrim Space Split Str StrComp StrConv StrReverse Trim UCase

Numeric Functions Abs Atn Avg Cos Count Exp Fix Format Int Max Min Randomize Rnd Round Sgn Sqr Sum Val

Date Functions Date DateAdd DateDiff DatePart DateSerial DateValue Day Format Hour Minute Month MonthName Now Second Time TimeSerial TimeValue Weekday WeekdayName Year

Other Functions CurrentUser Environ IsDate IsNull IsNumeric

SQL OperatorsSQL Data TypesSQL Quick Ref

Работа с unix timestamp/time на python

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

Как преобразовать unix timestamp в datetime на Python?

Делается это очень просто:

#!/bin/env python3

import datetime
timestamp = 1339521878.04
value = datetime.datetime.fromtimestamp(timestamp)
print(value.strftime('%Y-%m-%d %H:%M:%S'))

Чтобы получить datetime времени (сейчас), можно выполнить:

#!/bin/env python3

import datetime,time
dt = datetime.datetime.now()
value = datetime.datetime.fromtimestamp(time.mktime(dt.timetuple()))
print(value.strftime('%Y-%m-%d %H:%M:%S'))

Вывод будет следующим:

2017-08-04 14:25:21

Как преобразовать datetime в timestamp на Python?

Делается это очень просто:

#!/bin/env python3

from datetime import datetime
import time

# time tuple in local time to timestamp
time_tuple = (2017, 11, 12, 13, 59, 27, 2, 317, 0)
timestamp = time.mktime(time_tuple)
print (repr(timestamp))

# time tuple in utc time to timestamp
time_tuple_utc = (2017, 11, 12, 13, 59, 27, 2, 317, 0)
timestamp_utc = calendar.timegm(time_tuple_utc)
print (repr(timestamp_utc))

Конвертация в строку:

#!/bin/env python3

from datetime import datetime
import time

# datetime object to string
dt_obj = datetime(2017, 11, 10, 17, 53, 59)
date_str = dt_obj.strftime("%Y-%m-%d %H:%M:%S")
print (date_str)

# time tuple to string
time_tuple = (2017, 11, 12, 13, 51, 18, 2, 317, 0)
date_str = time.strftime("%Y-%m-%d %H:%M:%S", time_tuple)
print (date_str)

Конвертация в datetime:

#!/bin/env python3
from datetime import datetime
import time

# time tuple to datetime object
time_tuple = (2017, 11, 12, 13, 51, 18, 2, 317, 0)
dt_obj = datetime(*time_tuple)
print (repr(dt_obj))

# date string to datetime object
date_str = "2017-11-10 17:53:59"
dt_obj = datetime.strptime(date_str, "%Y-%m-%d %H:%M:%S")
print (repr(dt_obj))

# timestamp to datetime object in local time
timestamp = 1226527167.595983
dt_obj = datetime.fromtimestamp(timestamp)
print (repr(dt_obj))

# timestamp to datetime object in UTC
timestamp = 1226527167.595983
dt_obj = datetime.utcfromtimestamp(timestamp)
print (repr(dt_obj))

Получаем вывод:

datetime.datetime(2017, 11, 12, 13, 51, 18)
datetime.datetime(2017, 11, 10, 17, 53, 59)
datetime.datetime(2008, 11, 12, 23, 59, 27, 595983)
datetime.datetime(2008, 11, 12, 21, 59, 27, 595983)

Конвертация time tuples:

#!/bin/env python3

from datetime import datetime
import time

# datetime object to time tuple
dt_obj = datetime(2017, 11, 10, 17, 53, 59)
time_tuple = dt_obj.timetuple()
print (repr(time_tuple))

# string to time tuple
date_str = "2017-11-10 17:53:59"
time_tuple = time.strptime(date_str, "%Y-%m-%d %H:%M:%S")
print (repr(time_tuple))

# timestamp to time tuple in UTC
timestamp = 1226527167.595983
time_tuple = time.gmtime(timestamp)
print (repr(time_tuple))

# timestamp to time tuple in local time
timestamp = 1226527167.595983
time_tuple = time.localtime(timestamp)
print (repr(time_tuple))

Получим вывод:

time.struct_time(tm_year=2017, tm_mon=11, tm_mday=10, tm_hour=17, tm_min=53, tm_sec=59, tm_wday=4, tm_yday=314, tm_isdst=-
1)
time.struct_time(tm_year=2017, tm_mon=11, tm_mday=10, tm_hour=17, tm_min=53, tm_sec=59, tm_wday=4, tm_yday=314, tm_isdst=-
1)
time.struct_time(tm_year=2008, tm_mon=11, tm_mday=12, tm_hour=21, tm_min=59, tm_sec=27, tm_wday=2, tm_yday=317, tm_isdst=0
)
time.struct_time(tm_year=2008, tm_mon=11, tm_mday=12, tm_hour=23, tm_min=59, tm_sec=27, tm_wday=2, tm_yday=317, tm_isdst=0
)

Вот и все.

Convert from epoch to human-readable date

PHP Output format example: ‘r’ = RFC 2822 date,
Python

Replace time.localtime with time.gmtime for GMT time. Or using datetime:

Ruby
C#
Perl Use the Perl Epoch routines
Java Epoch in seconds, remove ‘*1000’ for milliseconds.
Lua
VBScript/ASP
AutoIT
Delphi Where Epoch is a signed integer.
C Use the C Epoch Converter routines
Objective-C
R
Go
Adobe ColdFusion
MySQL Default output format is YYY-MM-DD HH:MM:SS. If you need support for negative timestamps: (replace -315619200 with epoch) More MySQL
PostgreSQL
SQLite or local timezone:
Oracle PL/SQL Replace 1526357743 with epoch.
SQL Server
IBM Informix
Microsoft Excel / LibreOffice Calc Format the result cell for date/time, the result will be in GMT time (A1 is the cell with the epoch number). For other time zones: =((A1 +/- time zone adjustment) / 86400) + 25569.
Crystal Reports -14400 used for Eastern Standard Time. See Time Zones.
JavaScript Use the
Tcl/Tk
MATLAB
IBM PureData System for Analytics
Unix/Linux Shell Replace 1520000000 with your epoch, needs recent version of ‘date’. Replace ‘-d’ with ‘-ud’ for GMT/UTC time.
Mac OS X
PowerShell , then use: . Works for Windows PowerShell v1 and v2
Other OS’s Command line: (If Perl is installed) Replace ‘localtime’ with ‘gmtime’ for GMT/UTC time.

Thanks to everyone who sent me corrections and updates!

More date related programming examples: What’s the current week number? — What’s the current day number?

Как конвертировать дату в UNIX timestamp в Golang?

1. Создайте файл со следующим содержимым:

epoch.go

Go

package main

import ( «fmt» «time» )

func main() {

// Устанавливает эпоху из int64 t := time.Unix(0, 0) fmt.Println(t)

// Получает эпоху из экземпляра Time epoch := t.Unix() fmt.Println(epoch)

// Текущей UNIX timestamp в секундах apochNow := time.Now().Unix() fmt.Printf(«Время эпохи в секундах: %d\n», apochNow)

apochNano := time.Now().UnixNano() fmt.Printf(«Время эпохи в наносекундах: %d\n», apochNano)

}

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

packagemain

import(

«fmt»

«time»

)  

funcmain(){

// Устанавливает эпоху из int64

t=time.Unix(,)

fmt.Println(t)

// Получает эпоху из экземпляра Time

epoch=t.Unix()

fmt.Println(epoch)

// Текущей UNIX timestamp в секундах

apochNow=time.Now().Unix()

fmt.Printf(«Время эпохи в секундах: %d\n»,apochNow)

apochNano=time.Now().UnixNano()

fmt.Printf(«Время эпохи в наносекундах: %d\n»,apochNano)

  }

2. Запустите код через ; 3. Посмотрите на результат в терминале:

Shell

1970-01-01 00:00:00 +0000 UTC 0 Время эпохи в секундах: 1257894000 Время эпохи в наносекундах: 1257894000000000000

1 2 3 4

1970-01-01000000+0000UTC

Времяэпохивсекундах1257894000

Времяэпохивнаносекундах1257894000000000000


С этим читают