로컬 시간 문자열을 UTC로 변환하려면 어떻게 해야 합니까?
로컬 시각의 datetime 문자열을 UTC 시각의 문자열로 변환하려면 어떻게 해야 합니까?
전에도 해봤지만 찾을 수 없었고 앞으로도 SO가 도움이 될 것입니다.
설명:예를 들어, 만약2008-09-17 14:02:00
)에 있습니다.+10
하려고 합니다.UTC
★★★★★★★★★★★★★★★2008-09-17 04:02:00
.
또한 http://lucumr.pocoo.org/2011/7/15/eppur-si-muove/,에서는 일반적으로 DST 및 기타 문제와 마찬가지로 현지시간에서 UTC시간으로의 고유한 변환이 불가능하다는 점에 유의하십시오.
날짜/날짜이것은 의 예시입니다.datetime.datetime
시간대 정보가 첨부되지 않았습니다.메뉴얼을 참조해 주세요.
모듈을 사용합니다.이 모듈은 시간대 + UTC의 전체 목록이 포함되어 있습니다.로컬 타임존이 무엇인지 파악하고 타임존 오브젝트를 작성한 후 조작하여 naigent datetime에 부가합니다.
「」를 사용합니다.datetime.astimezone()
datetime을 UTC.합니다.
"2001-2-3 10:11:12" 문자열의 소스 코드(로컬 시간대 "America/Los_Angeles" 사용):
from datetime import datetime
import pytz
local = pytz.timezone("America/Los_Angeles")
naive = datetime.strptime("2001-2-3 10:11:12", "%Y-%m-%d %H:%M:%S")
local_dt = local.localize(naive, is_dst=None)
utc_dt = local_dt.astimezone(pytz.utc)
'이렇게'를할 수 있어요.strftime()
UTC:
utc_dt.strftime("%Y-%m-%d %H:%M:%S")
주의 - 2020년 시점에서는 다음 웹 사이트를 사용하지 마십시오..utcnow()
★★★★★★★★★★★★★★★★★」.utcfromtimestamp(xxx)
python3으로 넘어갔을 가능성이 높기 때문에 시간대 대응 datetime 객체를 사용해야 합니다.
>>> from datetime import timezone
>>>
>>> # alternative to '.utcnow()'
>>> dt_now = datetime.datetime.now(datetime.timezone.utc)
>>>
>>> # alternative to '.utcfromtimestamp()'
>>> dt_ts = datetime.fromtimestamp(1571595618.0, tz=timezone.utc)
상세한 것에 대하여는, 다음을 참조해 주세요.
답변(2010년 이후):
datetime 모듈의 utcnow() 함수를 사용하여 현재 UTC 시간을 얻을 수 있습니다.
>>> import datetime
>>> utc_datetime = datetime.datetime.utcnow()
>>> utc_datetime.strftime("%Y-%m-%d %H:%M:%S")
'2010-02-01 06:59:19'
위의 Tom 링크에 기재된 바와 같이 http://lucumr.pocoo.org/2011/7/15/eppur-si-muove/에는 다음과 같은 정보를 제공합니다.
UTC는 서머타임이 없는 타임존이지만 과거에 설정을 변경하지 않은 타임존입니다.
항상 UTC로 시간을 측정하고 저장하십시오.
시간이 걸린 장소를 기록할 필요가 있는 경우는, 따로 보존해 주세요.현지 시간 + 시간대 정보를 저장하지 마십시오!
메모 - 데이터가 DST를 사용하는 지역에 있는 경우pytz
존 밀리킨의 대답을 보세요.
특정 문자열에서 UTC 시간을 취득하고 DST를 사용하지 않는 지역 또는 DST를 적용하지 않고 UTC에서 오프셋된 데이터만 있는 경우:
--> 오프셋 값의 기준으로 현지 시간을 사용합니다.
>>> # Obtain the UTC Offset for the current system:
>>> UTC_OFFSET_TIMEDELTA = datetime.datetime.utcnow() - datetime.datetime.now()
>>> local_datetime = datetime.datetime.strptime("2008-09-17 14:04:00", "%Y-%m-%d %H:%M:%S")
>>> result_utc_datetime = local_datetime + UTC_OFFSET_TIMEDELTA
>>> result_utc_datetime.strftime("%Y-%m-%d %H:%M:%S")
'2008-09-17 04:04:00'
--> 또는 기존의 오프셋에서 datetime.timedelta()를 사용합니다.
>>> UTC_OFFSET = 10
>>> result_utc_datetime = local_datetime - datetime.timedelta(hours=UTC_OFFSET)
>>> result_utc_datetime.strftime("%Y-%m-%d %H:%M:%S")
'2008-09-17 04:04:00'
갱신:
3.2 python 3.2 datetime.timezone
사용할 수 있습니다.다음 명령을 사용하여 시간대 인식 datetime 개체를 생성할 수 있습니다.
import datetime
timezone_aware_dt = datetime.datetime.now(datetime.timezone.utc)
표준 시간대 변환을 수행할 준비가 되셨다면 다음을 참조하십시오.
@rofly 덕분에 문자열에서 문자열로의 완전한 변환은 다음과 같습니다.
time.strftime("%Y-%m-%d %H:%M:%S",
time.gmtime(time.mktime(time.strptime("2008-09-17 14:04:00",
"%Y-%m-%d %H:%M:%S"))))
★★★의 time
/calendar
★★★★
time.strptime
적용되지 string과 ) string --> tuple(tuple)
time.mktime
에폭(Epoch)
time.gmtime
epoch UTCepoch -->
그리고.
calendar.timegm
UTC 초 (UTC --> Epoch )
time.localtime
local epoch --> tuple in local timezone epoch --> "초"
다음은 일반적인 Python 시간 변환 요약입니다.
일부 메서드는 몇 초간의 분수를 드롭하고 (s)로 마크가 붙어 있습니다.다음과 같은 명시적 공식ts = (d - epoch) / unit
대신 사용할 수 있습니다(감사합니다).
- struct_time (UTC) → POSIX (s):
calendar.timegm(struct_time)
- Na440ve datetime(로컬): POSIX(s):
calendar.timegm(stz.localize(dt, is_dst=None).utctimetuple())
, 해 주세요 (DST 의 「」, jfs 의 「코멘트」를 참조해 주세요). - Na440ve datetime (UTC) → POSIX (s):
calendar.timegm(dt.utctimetuple())
- 인식 날짜/시간 → POSIX:
calendar.timegm(dt.utctimetuple())
- POSIX → struct_time (UTC, s):
time.gmtime(t)
를 참조해 주세요). - Na4ve datetime (로컬) → struct_time (UTC, s):
stz.localize(dt, is_dst=None).utctimetuple()
, 해 주세요 (DST 의 「」, jfs 의 「코멘트」를 참조해 주세요). - Na4ve datetime (UTC) → struct_time (UTC, s):
dt.utctimetuple()
- 인식 날짜/시간 → struct_time(UTC, s):
dt.utctimetuple()
- POSIX → Na440ve datetime (표준):
datetime.fromtimestamp(t, None)
할 수 해 주세요「jfs」를 참조해 주세요). - struct_time (UTC) → Na440ve datetime (로컬, s):
datetime.datetime(struct_time[:6], tzinfo=UTC).astimezone(tz).replace(tzinfo=None)
수 해 주세요 - Na4ve datetime (UTC) → Na4ve datetime (표준):
dt.replace(tzinfo=UTC).astimezone(tz).replace(tzinfo=None)
- "datetime" → Na440ve datetime (datetime) :
dt.astimezone(tz).replace(tzinfo=None)
- POSIX → Na440ve datetime (UTC):
datetime.utcfromtimestamp(t)
- struct_time (UTC) → Na440ve datetime (UTC, s):
datetime.datetime(*struct_time[:6])
수 해 주세요 - datetime (UTC
stz.localize(dt, is_dst=None).astimezone(UTC).replace(tzinfo=None)
, 해 주세요 (DST 의 「」, jfs 의 「코멘트」를 참조해 주세요). - datetime →UTC datetime → Na440ve datetime(UTC):
dt.astimezone(UTC).replace(tzinfo=None)
- POSIX → POSIX:
datetime.fromtimestamp(t, tz)
Pyzz 실패할 수 있음 (비 Pyzz 타임존의 경우) - struct_time(UTC) → 인식 날짜/시간(s):
datetime.datetime(struct_time[:6], tzinfo=UTC).astimezone(tz)
수 해 주세요 - Na440ve datetime(표준) → "표준 datetime:
stz.localize(dt, is_dst=None)
, 해 주세요 (DST 의 「」, jfs 의 「코멘트」를 참조해 주세요). - Na440ve datetime(UTC) → "datetime" :
dt.replace(tzinfo=UTC)
출처 : taaviburns.ca
저는 dateutil(다른 관련 질문에는 SO에서 널리 권장됨)을 사용하고 있습니다.
from datetime import *
from dateutil import *
from dateutil.tz import *
# METHOD 1: Hardcode zones:
utc_zone = tz.gettz('UTC')
local_zone = tz.gettz('America/Chicago')
# METHOD 2: Auto-detect zones:
utc_zone = tz.tzutc()
local_zone = tz.tzlocal()
# Convert time string to datetime
local_time = datetime.strptime("2008-09-17 14:02:00", '%Y-%m-%d %H:%M:%S')
# Tell the datetime object that it's in local time zone since
# datetime objects are 'naive' by default
local_time = local_time.replace(tzinfo=local_zone)
# Convert time to UTC
utc_time = local_time.astimezone(utc_zone)
# Generate UTC time string
utc_string = utc_time.strftime('%Y-%m-%d %H:%M:%S')
(UTC datetime 문자열을 로컬 datetime으로 변환하기 위한 이 응답에서 코드가 파생되었습니다.)
def local_to_utc(t):
secs = time.mktime(t)
return time.gmtime(secs)
def utc_to_local(t):
secs = calendar.timegm(t)
return time.localtime(secs)
출처 : http://feihonghsu.blogspot.com/2008/02/converting-from-local-time-to-utc.html
bd808의 사용 예: 소스가 a인 경우datetime.datetime
★★★t
, , , , , 라고.
local_to_utc(t.timetuple())
pytz의 예를 하나 더 들 수 있지만 localize()가 포함되어 있어 나를 구했다.
import pytz, datetime
utc = pytz.utc
fmt = '%Y-%m-%d %H:%M:%S'
amsterdam = pytz.timezone('Europe/Amsterdam')
dt = datetime.datetime.strptime("2012-04-06 10:00:00", fmt)
am_dt = amsterdam.localize(dt)
print am_dt.astimezone(utc).strftime(fmt)
'2012-04-06 08:00:00'
이후 수: Python 3.6 an an an 。datetime.astimezone(tz=None)
는 로컬 시간(표준)을 나타내는 인식된 datetime 객체를 취득하기 위해 사용할 수 있습니다.이 값은 UTC로 쉽게 변환할 수 있습니다.
from datetime import datetime, timezone
s = "2008-09-17 14:02:00"
# to datetime object:
dt = datetime.fromisoformat(s) # Python 3.7
# I'm on time zone Europe/Berlin; CEST/UTC+2 during summer 2008
dt = dt.astimezone()
print(dt)
# 2008-09-17 14:02:00+02:00
# ...and to UTC:
dtutc = dt.astimezone(timezone.utc)
print(dtutc)
# 2008-09-17 12:02:00+00:00
로의 정상적으로 만, UTC의 변환은 정상적으로 동작하고 있습니다..astimezone()
tzinfo
오브젝트를 datetime 로부터의 "은 하지 마십시오.「DST 」입니다.
저는 python-dateutil에서 가장 큰 성공을 거두었습니다.
from dateutil import tz
def datetime_to_utc(date):
"""Returns date in UTC w/o tzinfo"""
return date.astimezone(tz.gettz('UTC')).replace(tzinfo=None) if date.tzinfo else date
import time
import datetime
def Local2UTC(LocalTime):
EpochSecond = time.mktime(LocalTime.timetuple())
utcTime = datetime.datetime.utcfromtimestamp(EpochSecond)
return utcTime
>>> LocalTime = datetime.datetime.now()
>>> UTCTime = Local2UTC(LocalTime)
>>> LocalTime.ctime()
'Thu Feb 3 22:33:46 2011'
>>> UTCTime.ctime()
'Fri Feb 4 05:33:46 2011'
datetime.datetime을 원하는 경우:
dt = datetime.strptime("2008-09-17 14:04:00","%Y-%m-%d %H:%M:%S")
utc_struct_time = time.gmtime(time.mktime(dt.timetuple()))
utc_dt = datetime.fromtimestamp(time.mktime(utc_struct_time))
print dt.strftime("%Y-%m-%d %H:%M:%S")
간단하죠.
이렇게 했어요.
>>> utc_delta = datetime.utcnow()-datetime.now()
>>> utc_time = datetime(2008, 9, 17, 14, 2, 0) + utc_delta
>>> print(utc_time)
2008-09-17 19:01:59.999996
화려한 구현
화려해지고 싶다면, 이것을 펑터로 바꿀 수 있습니다.
class to_utc():
utc_delta = datetime.utcnow() - datetime.now()
def __call__(cls, t):
return t + cls.utc_delta
결과:
>>> utc_converter = to_utc()
>>> print(utc_converter(datetime(2008, 9, 17, 14, 2, 0)))
2008-09-17 19:01:59.999996
그럼...
time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime(seconds))
가 「초」인 경우None
로컬 시간을 UTC 시간으로 변환하지 않으면 전달된 시간을 UTC로 변환합니다.
다음을 사용하여 수행할 수 있습니다.
>>> from time import strftime, gmtime, localtime
>>> strftime('%H:%M:%S', gmtime()) #UTC time
>>> strftime('%H:%M:%S', localtime()) # localtime
다음은 Python3의 네이티브 zoneinfo 모듈의 예입니다.9:
from datetime import datetime
from zoneinfo import ZoneInfo
# Get timezone we're trying to convert from
local_tz = ZoneInfo("America/New_York")
# UTC timezone
utc_tz = ZoneInfo("UTC")
dt = datetime.strptime("2021-09-20 17:20:00","%Y-%m-%d %H:%M:%S")
dt = dt.replace(tzinfo=local_tz)
dt_utc = dt.astimezone(utc_tz)
print(dt.strftime("%Y-%m-%d %H:%M:%S"))
print(dt_utc.strftime("%Y-%m-%d %H:%M:%S"))
방법은 그냥 보다 더 좋을 수 .dt.astimezone()
변환하고 있는 타임존이 시스템의 로컬 타임존에 반영되지 않는 경우.외부 도서관에 의존하지 않아도 되는 것도 좋습니다.
주의: zoneinfo는 존재하지 않을 수 있는 IANA 데이터베이스에 의존하기 때문에 Windows 시스템에서는 작동하지 않을 수 있습니다.회피책으로 tzdata 패키지를 설치할 수 있습니다.퍼스트 파티 패키지이지만 표준 라이브러리에는 없습니다.
3. python 3.9.0을 한 후local_time
datetime.datetime
""를 사용합니다.local_time.astimezone(datetime.timezone.utc)
.
일광 절약 등을 위해.
위의 답변 중 특별히 도움이 되는 것은 없었습니다.다음 코드는 GMT에 유효합니다.
def get_utc_from_local(date_time, local_tz=None):
assert date_time.__class__.__name__ == 'datetime'
if local_tz is None:
local_tz = pytz.timezone(settings.TIME_ZONE) # Django eg, "Europe/London"
local_time = local_tz.normalize(local_tz.localize(date_time))
return local_time.astimezone(pytz.utc)
import pytz
from datetime import datetime
summer_11_am = datetime(2011, 7, 1, 11)
get_utc_from_local(summer_11_am)
>>>datetime.datetime(2011, 7, 1, 10, 0, tzinfo=<UTC>)
winter_11_am = datetime(2011, 11, 11, 11)
get_utc_from_local(winter_11_am)
>>>datetime.datetime(2011, 11, 11, 11, 0, tzinfo=<UTC>)
http://crsmithdev.com/arrow/ 사용방법
arrowObj = arrow.Arrow.strptime('2017-02-20 10:00:00', '%Y-%m-%d %H:%M:%S' , 'US/Eastern')
arrowObj.to('UTC') or arrowObj.to('local')
이 라이브러리는 생활을 편하게 해줍니다:)
프로젝트 중 하나에 다음 코드가 있습니다.
from datetime import datetime
## datetime.timezone works in newer versions of python
try:
from datetime import timezone
utc_tz = timezone.utc
except:
import pytz
utc_tz = pytz.utc
def _to_utc_date_string(ts):
# type (Union[date,datetime]]) -> str
"""coerce datetimes to UTC (assume localtime if nothing is given)"""
if (isinstance(ts, datetime)):
try:
## in python 3.6 and higher, ts.astimezone() will assume a
## naive timestamp is localtime (and so do we)
ts = ts.astimezone(utc_tz)
except:
## in python 2.7 and 3.5, ts.astimezone() will fail on
## naive timestamps, but we'd like to assume they are
## localtime
import tzlocal
ts = tzlocal.get_localzone().localize(ts).astimezone(utc_tz)
return ts.strftime("%Y%m%dT%H%M%SZ")
나는 여기서 다른 질문에서 가장 좋은 답을 찾았다.Python 내장 라이브러리만 사용하고 로컬 타임존을 입력할 필요가 없습니다(내 경우 필수 사항).
import time
import calendar
local_time = time.strptime("2018-12-13T09:32:00.000", "%Y-%m-%dT%H:%M:%S.%f")
local_seconds = time.mktime(local_time)
utc_time = time.gmtime(local_seconds)
검색 키워드에 따라 링크된 질문이 아니라 구글에 이 질문이 뜨기 때문에 여기에 답변을 다시 올립니다.
객체의 datetime이 my_dt
UTC를 사용하다
datetime.datetime.utcfromtimestamp(my_dt.timestamp())
가장 높은 투표율을 가진 답변에 혼란스러운 사람들을 위해.datetime 객체를 생성하여 datetime 문자열을 python의 uttime 시간으로 변환할 수 있습니다.그 후 astimezone(pytz.utc)을 사용하여 datetime을 uttime으로 가져올 수 있습니다.
예를 들면.
을 "datetime"으로 지정합니다.2021-09-02T19:02:00Z
Iso ★★★★★★★★★★★★★★★★」
이 문자열을 utc datetime으로 변환합니다.먼저 이 문자열을 사용하여 datetime 개체를 생성해야 합니다.
dt = datetime.strptime(dt,'%Y-%m-%dT%H:%M:%SZ')
객체가 되며, "python datetime", "python datetime", "python datetime", "python datetime" 을 사용할 수 있습니다.astimezone(pytz.utc)
datetime datetime을
dt = datetime.strptime(dt,'%Y-%m-%dT%H:%M:%SZ') dt = dt.astimezone(pytz.utc)
utc로 이 datetime 객체를 할 수 .그 후 다음 명령을 사용하여 문자열로 변환할 수 있습니다.dt.strftime("%Y-%m-%d %H:%M:%S")
풀코드 예:
from datetime import datetime
import pytz
def converLocalToUTC(datetime, getString=True, format="%Y-%m-%d %H:%M:%S"):
dt = datetime.strptime(dt,'%Y-%m-%dT%H:%M:%SZ')
dt = dt.astimezone(pytz.utc)
if getString:
return dt.strftime(format)
return dt
그럼 이렇게 불러도 되겠네
converLocalToUTC("2021-09-02T19:02:00Z")
https://stackoverflow.com/a/79877/7756843의 도움을 받았다.
간단히 말하면,datetime
UTC:
from datetime import datetime
def to_utc(date):
return datetime(*date.utctimetuple()[:6])
이치노VIP를 .datetime
★★★★★★★★★★★★★★★★★★:
>>> date = datetime.strptime("11 Feb 2011 17:33:54 -0800", "%d %b %Y %H:%M:%S %z")
다음으로 함수를 호출할 수 있습니다.
>>> to_utc(date)
datetime.datetime(2011, 2, 12, 1, 33, 54)
기능의 동작에 대해서, 스텝 바이 스텝:
>>> date.utctimetuple()
time.struct_time(tm_year=2011, tm_mon=2, tm_mday=12, tm_hour=1, tm_min=33, tm_sec=54, tm_wday=5, tm_yday=43, tm_isdst=0)
>>> date.utctimetuple()[:6]
(2011, 2, 12, 1, 33, 54)
>>> datetime(*date.utctimetuple()[:6])
datetime.datetime(2011, 2, 12, 1, 33, 54)
python3의 경우:
pip install python-dateutil
from dateutil.parser import tz
mydt.astimezone(tz.gettz('UTC')).replace(tzinfo=None)
그럼...
time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime(seconds))
가 「초」인 경우None
로컬 시간을 UTC 시간으로 변환하지 않으면 전달된 시간을 UTC로 변환합니다.
언급URL : https://stackoverflow.com/questions/79797/how-to-convert-local-time-string-to-utc
'it-source' 카테고리의 다른 글
"액티비티로 인해 페이지가 만료되었습니다." - Larabel 5.5 (0) | 2022.12.29 |
---|---|
Mysql 서비스가 없습니다. (0) | 2022.12.29 |
.htaccess에서 upload_max_filesize를 설정하는 방법 (0) | 2022.12.29 |
이러한 printf 문이 스택오버플로를 일으키는 이유는 무엇입니까? (0) | 2022.12.29 |
목록 목록에 있는 모든 문자열을 정수로 변환하려면 어떻게 해야 합니까? (0) | 2022.12.29 |