How to convert local time string to UTC?

后端 未结 23 1596
离开以前
离开以前 2020-11-22 04:18

How do I convert a datetime string in local time to a string in UTC time?

I\'m sure I\'ve done this before, but can\'t find it and SO will hopefull

23条回答
  •  一整个雨季
    2020-11-22 04:49

    Here's a summary of common Python time conversions.

    Some methods drop fractions of seconds, and are marked with (s). An explicit formula such as ts = (d - epoch) / unit can be used instead (thanks jfs).

    • struct_time (UTC) → POSIX (s):
      calendar.timegm(struct_time)
    • Naïve datetime (local) → POSIX (s):
      calendar.timegm(stz.localize(dt, is_dst=None).utctimetuple())
      (exception during DST transitions, see comment from jfs)
    • Naïve datetime (UTC) → POSIX (s):
      calendar.timegm(dt.utctimetuple())
    • Aware datetime → POSIX (s):
      calendar.timegm(dt.utctimetuple())
    • POSIX → struct_time (UTC, s):
      time.gmtime(t)
      (see comment from jfs)
    • Naïve datetime (local) → struct_time (UTC, s):
      stz.localize(dt, is_dst=None).utctimetuple()
      (exception during DST transitions, see comment from jfs)
    • Naïve datetime (UTC) → struct_time (UTC, s):
      dt.utctimetuple()
    • Aware datetime → struct_time (UTC, s):
      dt.utctimetuple()
    • POSIX → Naïve datetime (local):
      datetime.fromtimestamp(t, None)
      (may fail in certain conditions, see comment from jfs below)
    • struct_time (UTC) → Naïve datetime (local, s):
      datetime.datetime(struct_time[:6], tzinfo=UTC).astimezone(tz).replace(tzinfo=None)
      (can't represent leap seconds, see comment from jfs)
    • Naïve datetime (UTC) → Naïve datetime (local):
      dt.replace(tzinfo=UTC).astimezone(tz).replace(tzinfo=None)
    • Aware datetime → Naïve datetime (local):
      dt.astimezone(tz).replace(tzinfo=None)
    • POSIX → Naïve datetime (UTC):
      datetime.utcfromtimestamp(t)
    • struct_time (UTC) → Naïve datetime (UTC, s):
      datetime.datetime(*struct_time[:6])
      (can't represent leap seconds, see comment from jfs)
    • Naïve datetime (local) → Naïve datetime (UTC):
      stz.localize(dt, is_dst=None).astimezone(UTC).replace(tzinfo=None)
      (exception during DST transitions, see comment from jfs)
    • Aware datetime → Naïve datetime (UTC):
      dt.astimezone(UTC).replace(tzinfo=None)
    • POSIX → Aware datetime:
      datetime.fromtimestamp(t, tz)
      (may fail for non-pytz timezones)
    • struct_time (UTC) → Aware datetime (s):
      datetime.datetime(struct_time[:6], tzinfo=UTC).astimezone(tz)
      (can't represent leap seconds, see comment from jfs)
    • Naïve datetime (local) → Aware datetime:
      stz.localize(dt, is_dst=None)
      (exception during DST transitions, see comment from jfs)
    • Naïve datetime (UTC) → Aware datetime:
      dt.replace(tzinfo=UTC)

    Source: taaviburns.ca

提交回复
热议问题