Как получить время UTC в Python?
Я искал связку на StackExchange для решения, но ничего не делает, что мне нужно. В JavaScript я использую следующее, чтобы вычислить время UTC с 1 января 1970 года:
function UtcNow() {
var now = new Date();
var utc = Date.UTC(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds(), now.getUTCMilliseconds());
return utc;
}
Каким будет эквивалентный код Python?
Ответы
Ответ 1
Попробуйте использовать этот код, который использует datetime.utcnow():
from datetime import datetime
datetime.utcnow()
Для ваших целей, когда вам нужно рассчитать время, потраченное между двумя датами, все, что вам нужно, - это вычесть даты окончания и даты начала. Результатом такой подстройки является объект timedelta.
Из документов python:
class datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])
И это означает, что по умолчанию вы можете получить любое из полей, упомянутых в нем, определение -
дней, секунд, микросекунд, миллисекунд, минут, часов, недель. Также экземпляр timedelta имеет метод total_seconds(), который:
Возвращает общее количество секунд, содержащихся в длительности. Эквивалент (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10 * 6)/10 * 6, рассчитанных с включенным истинным делением.
Ответ 2
В форме, ближайшей к вашему оригиналу:
import datetime
def UtcNow():
now = datetime.datetime.utcnow()
return now
Если вам нужно знать количество секунд с 1970-01-01, а не собственный Python datetime
, используйте вместо этого:
return (now - datetime.datetime(1970, 1, 1)).total_seconds()
У Python есть соглашения об именах, которые не согласуются с тем, что вы могли бы использовать в Javascript, см. PEP 8. Кроме того, функция, которая просто возвращает результат другой функции, довольно глупа; если это просто вопрос о том, чтобы сделать его более доступным, вы можете создать другое имя для функции, просто назначив его. Первый пример выше можно заменить на:
utc_now = datetime.datetime.utcnow
Ответ 3
import datetime
import pytz
# datetime object with timezone awareness:
datetime.datetime.now(tz=pytz.utc)
# seconds from epoch:
datetime.datetime.now(tz=pytz.utc).timestamp()
# ms from epoch:
int(datetime.datetime.now(tz=pytz.utc).timestamp() * 1000)
Ответ 4
Из datetime.datetime вы уже можете экспортировать в метки времени с помощью метода strftime. Следуя вашему примеру функции:
import datetime
def UtcNow():
now = datetime.datetime.utcnow()
return int(now.strftime("%s"))
Если вам нужны микросекунды, вам нужно изменить строку экспорта и привести ее к плавающему типу: return float(now.strftime("%s.%f"))
Ответ 5
В Python 3 с использованием лямбда-выражения попробуйте;
from datetime import datetime
utc_now = lambda : datetime.utcnow()
и вызовите функцию как обычно;
print(utc_now())
Ответ 6
Часовой пояс с нулевыми внешними зависимостями:
from datetime import datetime, timezone
def utc_now():
return datetime.utcnow().replace(tzinfo=timezone.utc)
Ответ 7
Покажите время UTC или GMT без формата вывода в Python v3.7.2:
import time
print(time.asctime(time.gmtime()))
Выход должен быть:
Fri Feb 1 16:17:06 2019
Ответ 8
Простая стандартная библиотека только для современного Python. Дает дату/время с учетом часового пояса, в отличие от datetime.utcnow()
. datetimes
без часовых поясов - это несчастные случаи, ожидающие своего появления.
from datetime import datetime,timezone
now_utc = datetime.now(timezone.utc)