Varsa d = DateTime.now, 'd'yi UTC'ye (uygun tarihle) nasıl dönüştürebilirim?
Yanıtlar:
d = DateTime.now.utc
Oops!
Bu, Rails'de işe yarıyor gibi görünüyor, ancak Ruby'de değil (ve tabii ki sorunun sorduğu şey bu)
d = Time.now.utc
Ancak çalışıyor.
Kullanmanız gereken bir sebebi var mı DateTimedeğil Time? Timeihtiyacınız olan her şeyi içermelidir:
irb(main):016:0> Time.now
=> Thu Apr 16 12:40:44 +0100 2009
DateTime.now.new_offset(0)
standart Ruby'de çalışacaktır (yani ActiveSupport olmadan).
new_offsetyöntem bağımsız değişkeni varsayılan olarak 0zaten. Bu yüzden DateTime.now.new_offsetde kullanılabilir.
Ne yazık ki, DateTime sınıfı bunu yapmak için Time sınıfında kullanılabilen uygunluk yöntemlerine sahip değildir. Herhangi bir DateTime nesnesini şu şekilde UTC'ye dönüştürebilirsiniz:
d = DateTime.now
d.new_offset(Rational(0, 24))
Aşağıdakileri kullanarak UTC'den yerel zamana geri dönebilirsiniz:
d.new_offset(DateTime.now.offset)
dUTC saatine göre bir DateTime nesnesi nerede . Bunları kolaylık yöntemleri olarak istiyorsanız, bunları şu şekilde oluşturabilirsiniz:
class DateTime
def localtime
new_offset(DateTime.now.offset)
end
def utc
new_offset(Rational(0, 24))
end
end
Bunu aşağıdaki irb oturumunda eylem halinde görebilirsiniz:
d = DateTime.now.new_offset(Rational(-4, 24))
=> #<DateTime: 106105391484260677/43200000000,-1/6,2299161>
1.8.7 :185 > d.to_s
=> "2012-08-03T15:42:48-04:00"
1.8.7 :186 > d.localtime.to_s
=> "2012-08-03T12:42:48-07:00"
1.8.7 :187 > d.utc.to_s
=> "2012-08-03T19:42:48+00:00"
Yukarıda görebileceğiniz gibi, ilk DateTime nesnesinin -04: 00 uzaklığı (Doğu Saati) vardır. Pasifik Saati ile -07: 00 farkındayım. localtimeDaha önce açıklandığı gibi arama , DateTime nesnesini düzgün bir şekilde yerel saate dönüştürür. utcNesneyi çağırmak , onu düzgün bir şekilde UTC sapmasına dönüştürür.
UTC saatinde yanıt vermek Time.nowve DateTime.nowyanıtlamak istiyorsanız bir ENV ayarlayabilirsiniz .
require 'date'
Time.now #=> 2015-11-30 11:37:14 -0800
DateTime.now.to_s #=> "2015-11-30T11:37:25-08:00"
ENV['TZ'] = 'UTC'
Time.now #=> 2015-11-30 19:37:38 +0000
DateTime.now.to_s #=> "2015-11-30T19:37:36+00:00"