UTC'de bir zaman damgam var
"2010-10-25 23:48:46 UTC"
ISO 8601'e dönüştürmem gerekiyor
"2010-10-29 06: 09Z"
Belgeler cehennem gibi kafa karıştırıcı - bunu yapmanın en kolay yolu nedir?
Yanıtlar:
Bizi kandırmaya çalıştığını düşünüyorum.
Sorunuzun giriş tarihi 25 Ekim 2010 iken çıktı 29 Ekim 2010'dur . Güzel oynadı!
Bu nit-toplama iş parçacığına devam edersek: zamanlarınız da tamamen farklıdır ve çıktı süresinden saniyeleri kaçırıyorsunuz.
Şimdi doğru cevap için.
Öncelikle biraz daha basit: Ruby'deki ISO 8601 çıktısı, ISO 8601'in Wikipedia sayfasındaki "Birleşik tarih ve saat" çıktısına benzer .
Bir dizginiz var ve bu yüzden onu Time
yapabileceğiniz bir nesneye dönüştürmeniz gerekecek to_time
. O zaman iso8601
ISO 8601 sürümünü edinmek için o nesneyi çağırmak yeterlidir :
"2010-10-25 23:48:46 UTC".to_time.iso8601
to_time
İken yöntem Raylar nezaketi iso8601
Ruby'nin standart kütüphanenin nezaket olduğunu.
Çok fazla deney yaptıktan sonra, nedenler şu anda benden kaçsa da, Zaman kitaplığının ayrıştırıcısının DateTime'dan daha iyi olduğunu buldum. Bu uyarı ile, bu tür şeyler için her zaman DateTime yerine Time kullanıyorum ve ruby dokümantasyonunun da bunun neden böyle olduğunu anlamak zordur.
require 'time'
puts Time.parse("2010-10-25 23:48:46 UTC").iso8601
"2010-10-25T23:48:46Z"
Time.parse("...").utc.iso8601
aksi takdirde +03:00
, orijinal zaman dizesinin verildiği zaman dilimine bağlı olarak son ekli zamanı veya başka bir değeri alırsınız . Yani yerine Z
.
Not: to_time yöntemini uygulamadan önce bir zaman dizesini zaman nesnesine dönüştürmeniz (ayrıştırmanız) gerekir.
ruby-1.9.2-p180 :016 > "2010-10-25 23:48:46 UTC".to_time.iso8601
NoMethodError: undefined method `to_time' for "2010-10-25 23:48:46 UTC":String
from (irb):16
Doğru prosedür:
irb> ut = DateTime.parse("2010-10-25 23:48:46 UTC")
irb> ut.iso8601
=> "2010-10-25T23:48:46+00:00"
Bu çok eski soruya bir cevap eklemek, çünkü Rails kullanıyorsanız, buradaki diğer cevapların size söylediği şekilde onu dönüştürmenize / ayrıştırmanıza gerek yoktur:
created_at
veya updated_at
öznitelik), yöntemi o zaman damgasında doğrudan çağırabilirsiniz iso8601
(örn object.created_at.iso8601
.iso8601
Yöntem ayrıca, fraksiyonel basamak görüntülemek için sayısal bir bağımsız değişken kabul; İsterseniz bu kullanmak istiyorsunuz 2020-04-06T19:16:55.604Z
yerine 2020-04-06T19:16:55Z
.https://api.rubyonrails.org/v5.2.4/classes/ActiveSupport/TimeWithZone.html#method-i-iso8601