2012-10-05 31 views
10

Raylarda, DateTime.now.utc ve Time.current öğelerinin ne zaman kullanılacağı konusunda biraz kafa karıştırıcıyım. Özellikle farklı versiyonlarda en iyi olan çerçeve içinde farklı görüşler vardır. DateTime.now.utc sıfır ofset bir UTC ile bir zaman damgası üretir gibi Time.current.utc UTC bir saat dilimine sahip bir zaman damgası üretirkenRails'de "DateTime.now.utc" ile "Time.current.utc" ne zaman kullanılmalıdır?

O görünüyor. Bu ince bir ayrım gibi gözüküyor, ancak çoğu durumda oldukça önemli (örneğin, DST hesaplamaları).

DateTime.now.utc'u ne zaman kullanmalı ve Time.current.utc'u ne zaman kullanmalısınız? Time.current.utc yerine DateTime.now.utc kullanmak için herhangi bir neden var mı?

+0

Fark yaratan bir örnek verebilir misiniz? UTC'nin herhangi bir gün ışığından yararlanma geçişleri olmadığı göz önüne alındığında, kesinlikle başka zaman dilimlerini kullanmaya başladığınızda bir fark yaratıyor ... (Ruby'yi bilmiyorum, ama çok fazla tarih/zaman meselesi yaptım, Böylece daha fazla arka plan ile yardımcı olabilirim.) –

+0

@JonSkeet: Fark yaratıp yaratmadığını bilmiyorum. (Bu yüzden hangisini kullanmam gerektiğini soruyorum!) 'DateTime.now.utc' ilk olarak' DateTime.now' öğesini çağırır ve daha sonra "UTC" zamanına ulaşmak için UTC ofsetini tersine çevirir. Yani _time zones_ arasında değil, _offsets_ arasında çeviri yapmadığına dikkat edin. Bu durum, örneğin Şangay'daki rezil 1927-1928 örneğinde sorun yaratabilir mi? –

+0

@JonSkeet: Aslında UTC'de değilseniz, o zaman "DateTime.now" ve "Time.current" her ikisi de UTC'den başka bir yerde yerel bir saat oluşturur. Başka bir deyişle, UTC'ye nasıl dönüştükleri konusundaki yaklaşımlarında farklılık gösterirler - bir tanesi doğrudan bir ofset uygulayarak yapar; diğeri, UTC'nin yeni saat dilimindeki zaman dilimi hesaplamalarını aslında tekrarlayarak yapar. –

cevap

30

yerine .current kullanmalısınız. .current ne gerek Raylar çevre ayarlandığında ise

.current farkı ve .now, .now sunucunun dilimini kullanmaktır. Ayarlanmamışsa, .current, .now ile aynı olacaktır. Time.zone veya config.time_zone ayarlanır

an gerçekleştirilebilmektedir

İade Time.zone.now, aksi takdirde sadece Time.now döndürür.

Datetime.current

İade Time.zone.now.to_datetime Time.zone veya config.time_zone ayarlanır, aksi Zaman döndürür. now.to_datetime.

+0

Date.current ve Date.today hakkında bunlar aynı mıdır? – ajahongir

+0

'Time.now.in_time_zone' ve' Time.current' arasındaki fark nedir? –

+0

@pinouchon Aynı şey, her ikisi de 'ActiveSupport :: TimeWithZone' örneğinin geri dönüş örneğidir. – xdazz

İlgili konular