Czy czas Pythona.time () zwraca lokalny lub UTC znacznik czasu?
Czy time.time()
w module czasowym Pythona zwraca Czas systemu lub czas w UTC?
8 answers
The time.time()
funkcja zwraca liczbę sekund od epoki, jako sekundy. Zauważ, że "epoka" jest zdefiniowana jako początek 1 stycznia 1970 roku w UTC. Tak więc Epoka jest zdefiniowana w kategoriach UTC i ustanawia globalny moment w czasie. Bez względu na to, gdzie jesteś "seconds past epoch" (czas.time()) zwraca tę samą wartość w tym samym momencie.
Oto Przykładowe wyjście, które uruchomiłem na moim komputerze, konwertując je również na ciąg znaków.
Python 2.7.3 (default, Apr 24 2012, 00:00:54)
[GCC 4.7.0 20120414 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> ts = time.time()
>>> print ts
1355563265.81
>>> import datetime
>>> st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
>>> print st
2012-12-15 01:21:05
>>>
Zmienna ts
jest czas zwracany w sekundach. Następnie przekonwertowałem go na ciąg znaków za pomocą biblioteki datetime
, czyniąc go ciągiem czytelnym dla człowieka.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-23 16:52:07
Jest to dla forma tekstowa znacznika czasu , który może być używany w plikach tekstowych. (Tytuł pytania był w przeszłości inny, więc wstęp do tej odpowiedzi został zmieniony, aby wyjaśnić, jak można go interpretować jako czas. [aktualizacja 2016-01-14])
Możesz uzyskać znacznik czasu jako ciąg znaków za pomocą .now()
lub .utcnow()
z datetime.datetime
:
>>> import datetime
>>> print datetime.datetime.utcnow()
2012-12-15 10:14:51.898000
now
różni się od utcnow
zgodnie z oczekiwaniami - w przeciwnym razie działają w ten sam sposób:
>>> print datetime.datetime.now()
2012-12-15 11:15:09.205000
Możesz renderować znacznik czasu do łańcucha jawnie:
>>> str(datetime.datetime.now())
'2012-12-15 11:15:24.984000'
Lub możesz być jeszcze bardziej wyraźny, aby sformatować znacznik czasu tak, jak chcesz:
>>> datetime.datetime.now().strftime("%A, %d. %B %Y %I:%M%p")
'Saturday, 15. December 2012 11:19AM'
Jeśli chcesz mieć format ISO, użyj metody .isoformat()
obiektu:
>>> datetime.datetime.now().isoformat()
'2013-11-18T08:18:31.809000'
Można ich używać w zmiennych do obliczeń i drukowania bez konwersji.
>>> ts = datetime.datetime.now()
>>> tf = datetime.datetime.now()
>>> te = tf - ts
>>> print ts
2015-04-21 12:02:19.209915
>>> print tf
2015-04-21 12:02:30.449895
>>> print te
0:00:11.239980
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-01 19:53:32
Na podstawie odpowiedzi z # squiguy, aby uzyskać prawdziwy znacznik czasu, wpisałbym cast it z float.
>>> import time
>>> ts = int(time.time())
>>> print(ts)
1389177318
Przynajmniej taka jest koncepcja.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-08 10:37:55
Odpowiedź może być jedno i drugie.
Ani:
time.time()
zwraca w przybliżeniu liczbę sekund, które upłynęły od epoki. Wynik nie zależy od strefy czasowej, więc nie jest to czas UTC ani lokalny. Oto definicja POSIX dla "sekund od epoki" .-
Both:
time.time()
nie wymaga synchronizacji zegara systemowego, więc odzwierciedla jego wartość (choć nie ma to nic wspólnego z lokalną strefą czasową). Różne komputery mogą się różnić wyniki w tym samym czasie. Z drugiej strony, jeśli czas komputera jest zsynchronizowany , łatwo jest uzyskać czas UTC ze znacznika czasu (jeśli ignorujemy sekundy przestępne):from datetime import datetime utc_dt = datetime.utcfromtimestamp(timestamp)
Jak uzyskać znaczniki czasu z czasu UTC w różnych wersjach Pythona, zobacz Jak mogę uzyskać datę przekonwertowaną na sekundy od epoki zgodnie z UTC?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:45
W końcu zdecydowałem się na:
>>> import time
>>> time.mktime(time.gmtime())
1509467455.0
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-31 17:32:23
Nie ma czegoś takiego jak "epoka" w określonej strefie czasowej. Epoka jest dobrze zdefiniowana jako konkretny moment w czasie, więc jeśli zmienisz strefę czasową, sam czas również się zmienia. Konkretnie, tym razem jest Jan 1 1970 00:00:00 UTC
. Więc time.time()
Zwraca liczbę sekund od epoki.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-20 00:07:43
Timestamp jest zawsze czasem w utc, ale gdy wywołujesz datetime.datetime.fromtimestamp
zwraca ci czas w lokalnej strefie czasowej odpowiadającej temu znacznikowi czasu, więc wynik zależy od ustawień regionalnych.
>>> import time, datetime
>>> time.time()
1564494136.0434234
>>> datetime.datetime.now()
datetime.datetime(2019, 7, 30, 16, 42, 3, 899179)
>>> datetime.datetime.fromtimestamp(time.time())
datetime.datetime(2019, 7, 30, 16, 43, 12, 4610)
Istnieje Ładna biblioteka arrow
z innym zachowaniem. W tym samym przypadku zwraca obiekt czasu z strefą czasową UTC.
>>> import arrow
>>> arrow.now()
<Arrow [2019-07-30T16:43:27.868760+03:00]>
>>> arrow.get(time.time())
<Arrow [2019-07-30T13:43:56.565342+00:00]>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-29 10:26:45
Aby uzyskać lokalny znacznik czasu za pomocą biblioteki datetime, Python 3.x
#wanted format: year-month-day hour:minute:seconds
from datetime import datetime
# get time now
dt = datetime.now()
# format it to a string
timeStamp = dt.strftime('%Y-%m-%d %H:%M:%S')
# print it to screen
print(timeStamp)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-14 22:56:14