2010-12-10 30 views
6

Bunun döndürür nasıl karıştı:Bu Ruby işlevi ne yapıyor?

def utc2user(t) 
    ENV["TZ"] = current_user.time_zone_name 
    res = t.getlocal 
    ENV["TZ"] = "UTC" 
    res 
end 

İlk ENV değişken setleri, daha sonra, yerel değerin oradan da tekrar assignes ENV değişken, daha sonra döner res 'res' ayarlar?

Bunun UTC'den kullanıcı saat dilimine nasıl dönüştüğünü anladığımdan emin değilim?

+0

Bazı bilgiler: http://wiki.rubyonrails.org/howtos/time-zones – Zabba

cevap

7

İlk satır, o kullanıcı için doğru zamanda res değerini almak için kullanıcının saat dilimine çevre zaman dilimi değişkenini ayarlıyor. Kullanıcıya ayarlamadıysa, zaman hala UTC’de olurdu.

Daha sonra, çevresel değişkeni, uygulamanın varsayılan değeri olarak kabul ettiğim UTC zamanına döndürür.

res'u döndürür.

2

Saat, tarafından belirtilen saat dilimi adına göre iletilen Time nesnesini çağırarak döndürür.

Daha sonra, UTC geçerli zaman dilimini sıfırlar ve Time amacı bu çağırma zamanında getlocaldönen döner (yani ortamın saat dilimi kullanıcının zaman dilimi ne olursa olsun zaman).

2

Bu işlev, girişi zaman olarak alır, kullanıcı saat dilimini TZ'ye geçirir, böylece getlocal yöntemi çağrıldığında, gerçek zamanlı olarak kullanıcının yerel saat dilimini temel alarak ve UTC'de olmayan süreyi alır. Daha sonra TZ envt değişkenini UTC'ye geri döndürür ve son kullanıcının yerel saat dilimini gerçekten döndürür.

4

getlocal yöntem ENV [ "TZ"] kullanır, böylece bu geçici ayarlayın kullanmak ve sonra geri koymak için sadece küçük bir danstır.

Bu durumda "UTC" ye "geri" konulmasına rağmen, daha önce değil, biraz şüpheli görünüyor. Yine de, bunu doğrudan yapmak için bir in_time_zone yöntemi var!

+0

Bu kod, Rails Recipes kitabından bir örnektir. – Zabba