Bagaimana cara mengonversi datetime ke zona waktu berbeda dengan python?

Zona waktu untuk waktu. Stempel waktu yang sesuai akan dikonversi ke zona waktu Array/Indeks Datetime ini. Satu tz dari Tidak Ada akan mengonversi ke UTC dan menghapus informasi zona waktu

ReturnsArray atau IndexRaisesTypeError

Jika Datetime Array/Index adalah tz-naif

Lihat juga

Zona waktu yang memiliki offset variabel dari UTC

Lokalkan DatetimeIndex tz-naive ke zona waktu tertentu, atau hapus zona waktu dari DatetimeIndex yang sadar tz

Saya biasanya menemukan Python bahasa yang sangat serbaguna yang memungkinkan Anda melakukan banyak hal tanpa harus mengeluarkan banyak usaha. Namun saya mengalami beberapa masalah dengan modul datetime

Untuk tujuan dasar, modul datetime cukup memadai, tetapi sayangnya zona waktu tidak dapat dimanipulasi dan digunakan hanya dengan modul datetime. Misalnya tugas sederhana seperti mengonversi objek waktu tanggal dari satu zona waktu ke zona waktu lainnya bisa sangat menakutkan. Jadi saya akan menggunakan ini sebagai contoh untuk menunjukkan bagaimana Anda dapat menangani zona waktu

Objek datetime sederhana disebut naif zona waktu. Jadi ketika kita melakukan hal berikut

from datetime import datetime
now = datetime.now()

Ini membuat objek datetime, yang tidak memiliki informasi tentang zona waktu, dan menggunakan waktu sistem saat ini. Untuk menggunakan zona waktu dengannya, Anda perlu mengubahnya menjadi objek sadar zona waktu. Ini dapat dilakukan dengan menggunakan fungsi ganti sebagai berikut

# suppose you have the desired timezone in the variable tz    
now = now.replace(tzinfo = tz)
_

Ada dua hal, pertama bagaimana kita bisa mendapatkan objek tzinfo, dan kedua, apakah objek now berisi datetime yang benar sesuai dengan zona waktu yang telah Anda masukkan. Saya akan datang ke bagian pertama nanti, tetapi jawaban untuk bagian kedua adalah TIDAK

Apa yang dilakukan penggantian adalah mengisi bidang tzinfo, dan hanya menerima bahwa Anda telah memberikan zona waktu yang benar untuk waktu tanggal. Jadi misalkan Anda berada di India (zona waktu Anda adalah Asia/Kolkata) dan Anda menyetel tzinfo untuk Eropa/Berlin maka itu hanya akan menerima bahwa waktu sistem saat ini sebenarnya adalah sistem Eropa/Berlin, yang sebenarnya salah

Jadi jika Anda ingin mengonversi datetime dari satu zona waktu ke zona waktu lainnya, Anda harus menggunakan astimezone

now = datetime.now()
now = now.replace(tzinfo = tz)
now = now.astimezone(tz)

Di sini kita harus melihat bahwa kita tidak dapat langsung menggunakan astimezone karena datetime.now() memberi kita objek naif zona waktu dan kita dapat menggunakan zona waktu hanya pada objek yang sadar zona waktu. Jadi meskipun garis tengah sepertinya tidak berguna, kita tetap harus menggunakannya

Sekarang sampai pada titik bagaimana kita bisa mendapatkan zona waktu yang berbeda. Dan itu bukanlah tugas yang sangat lurus ke depan. Kita harus menggunakan dua modul untuk itu

# suppose you have the desired timezone in the variable tz    
now = now.replace(tzinfo = tz)
0 dan
# suppose you have the desired timezone in the variable tz    
now = now.replace(tzinfo = tz)
1 keduanya sangat berguna. Jadi jika kita perlu mendapatkan zona waktu saat ini maka kita akan melakukan hal berikut

from dateutil.tz import *
# This contains the local timezone 
local = tzlocal()
now = datetime.now()
now = now.replace(tzinfo = local)

# prints a timezone aware datetime
print now

Dan misalkan kita ingin mengonversi ini menjadi utc datetime maka kita akan melakukannya

utc = tzutc()
utc_now = now.astimezone(utc)
print utc_now
_

Menggunakan modul dateutil saja tidak memberi kita banyak fleksibilitas karena kita hanya bisa mendapatkan tzlocal() dan tzutc(), tetapi bagaimana jika kita harus mengonversi datetime ke zona waktu lain. Dalam hal ini kita harus menggunakan modul pytz. Misalkan Anda tahu bahwa zona waktu Anda adalah 'Asia\Kolkata' dan Anda ingin mengonversi waktu dari zona waktu lain, Anda akan melakukan hal berikut

import pytz

# assuming now contains a timezone aware datetime
tz = pytz.timezone('Asia/Kolkata')
your_now = now.astimezone(tz)
print your_now

Seperti yang saya katakan sebelumnya, modul dateutil dan pytz cukup berguna dan dapat digunakan untuk hal lain juga. Anda bebas menjelajahinya jika Anda mau. Sebagai contoh, misalkan Anda memiliki datetime dalam string sebagai 5 P. M. 21 Januari dateutil dapat menguraikannya menjadi objek datetime sebagai

from dateutil.parser import *
parse("5 P.M. 21st January")
_

Catatan. Jika Anda menggunakan dateutil dengan python2. x Anda cenderung mendapatkan kesalahan karena ada beberapa yang tidak kompatibel, jadi Anda juga harus menginstal python-dateutil==1. 5

Rumah

Tutorial

Piton

Cara mengonversi datetime ke zona waktu berbeda di Python menggunakan pytz

Cara mengonversi datetime ke zona waktu berbeda di Python menggunakan pytz

Buat instance datetime dengan info zona waktu

import datetime
import pytz
dt = datetime.datetime(2021, 1, 6, 0, 0, 0)
tz = pytz.timezone('Asia/Kolkata')
tzinfo_dt = tz.localize(dt)
tzinfo_dt

# output:
# datetime.datetime(2021, 1, 6, 0, 0, tzinfo=<DstTzInfo 'Asia/Kolkata' IST+5:30:00 STD>)
_

Melewati tzinfo di datetime tidak direkomendasikan oleh pytz

Mengkonversi datetime ke zona waktu yang berbeda

import datetime
import pytz

#creating timezone aware datetime instance
dt = pytz.utc.localize(datetime.datetime.now())
# converting to IST
ist_dt = dt.astimezone(pytz.timezone('Asia/Kolkata'))
ist_dt
# output:
# datetime.datetime(2021, 1, 6, 9, 28, 57, 974939, tzinfo=<DstTzInfo 'Asia/Kolkata' IST+5:30:00 STD>)

us_east = dt.astimezone(pytz.timezone('US/Eastern'))
# output:
# datetime.datetime(2021, 1, 5, 23, 1, 49, 588549, tzinfo=<DstTzInfo 'US/Eastern' EST-1 day, 19:00:00 STD>)

Latihan. Cari tahu apa nilai dt pada contoh di atas, posting di komentar

Pos terkait

Buat lingkungan virtual Python3 di Ubuntu dan Mac

Bagaimana cara mengonversi datetime ke zona waktu tertentu?

Untuk melakukannya, kita akan menggunakan FindSystemTimeZoneById() dari kelas TimeZoneInfo . Fungsi ini menggunakan Id sebagai parameter untuk mengembalikan waktu yang setara dalam zona waktu yang dilewati. Dalam contoh di bawah ini, kami mengambil waktu sistem saat ini dan mengubahnya menjadi "Waktu Standar Tengah". DateTime currentTime = TimeZoneInfo.

Bagaimana cara mengubah zona waktu stempel waktu dengan Python?

Ilmu Data Praktis menggunakan Python .
impor panda sebagai pd. Buat objek stempel waktu di Pandas. Kami juga telah mengatur zona waktu
cap waktu = pd. Stempel waktu('2021-10-14T15. 12. 34. 261811624', tz='US/Eastern') Mengonversi zona waktu stempel waktu
cap waktu. tz_convert('Australia/Brisbane')) Contoh. Berikut ini adalah kodenya

Bagaimana cara mengonversi datetime ke zona waktu UTC dengan Python?

Anda dapat menggunakan modul datetime untuk mengonversi datetime menjadi stempel waktu UTC dengan Python . Jika Anda sudah memiliki objek datetime di UTC, Anda dapat menggunakan timestamp() untuk mendapatkan stempel waktu UTC. Fungsi ini mengembalikan waktu sejak zaman untuk objek datetime tersebut.

Bagaimana cara mengonversi tanggal dan waktu ke UTC?

Untuk mengonversi waktu di zona waktu non-lokal ke UTC, gunakan TimeZoneInfo. Metode ConvertTimeToUtc(DateTime, TimeZoneInfo) . Untuk mengonversi waktu yang offsetnya dari UTC diketahui, gunakan metode ToUniversalTime. Jika nilai instance tanggal dan waktu adalah waktu yang ambigu, metode ini mengasumsikan bahwa itu adalah waktu standar.