Jika sudah d = DateTime.now
, bagaimana cara mengubah 'd' menjadi UTC (dengan tanggal yang sesuai)?
96
d = DateTime.now.utc
Ups!
Itu tampaknya berfungsi di Rails, tetapi tidak vanilla Ruby (dan tentu saja itulah yang ditanyakan oleh pertanyaan)
d = Time.now.utc
Namun berhasil.
Apakah ada alasan Anda perlu menggunakan DateTime
dan tidak Time
? Time
harus menyertakan semua yang Anda butuhkan:
irb(main):016:0> Time.now
=> Thu Apr 16 12:40:44 +0100 2009
akan bekerja di Ruby standar (yaitu tanpa ActiveSupport).
sumber
new_offset
argumen metode default0
sudah. JadiDateTime.now.new_offset
semoga bisa digunakan juga.Sayangnya, kelas DateTime tidak memiliki metode praktis yang tersedia di kelas Waktu untuk melakukan ini. Anda dapat mengonversi objek DateTime apa pun menjadi UTC seperti ini:
Anda dapat beralih kembali dari UTC ke waktu lokal menggunakan:
dimana
d
adalah objek DateTime dalam waktu UTC. Jika Anda menginginkan ini sebagai metode praktis, Anda dapat membuatnya seperti ini:Anda dapat melihat ini beraksi di sesi irb berikut:
Seperti yang Anda lihat di atas, objek DateTime awal memiliki offset -04: 00 (Waktu Bagian Timur). Saya berada di Waktu Pasifik dengan offset -07: 00. Memanggil
localtime
seperti yang dijelaskan sebelumnya dengan benar mengubah objek DateTime menjadi waktu lokal. Memanggilutc
objek dengan benar mengubahnya menjadi offset UTC.sumber
Coba ini, bekerja di Ruby :
sumber
Anda dapat menyetel ENV jika Anda ingin
Time.now
danDateTime.now
merespons dalam waktu UTC.sumber
Dalam irb:
akan mengubah waktu menjadi utc. Tetapi seperti yang diposting jika itu hanya Waktu yang dapat Anda gunakan:
dan langsung dapatkan.
sumber
Representasi string dari DateTime dapat diurai oleh kelas Waktu.
sumber