Wywołanie Date.today
w Ruby zwraca bieżącą datę. Jaka jest strefa czasowa? Zakładam UTC, ale chcę się upewnić. The documentation nie określa ani sposób.Czy Date.today w UTC?
Odpowiedz
Daty nie mają stref czasowych, ponieważ nie reprezentują czasu.
Powiedział, że jak dla jak oblicza aktualny dzień, spójrzmy na tym wyciągu z the code for Date.today
:
time_t t;
struct tm tm;
// ...
if (time(&t) == -1)
rb_sys_fail("time");
if (!localtime_r(&t, &tm))
rb_sys_fail("localtime");
Następnie przechodzi do korzystania korzystanie tm
do utworzenia obiektu Date
. Ponieważ tm
zawiera lokalny czas systemu przy użyciu localtime()
, Date.today
wykorzystuje zatem czas lokalny systemu, a nie UTC.
zawsze można użyć Time#utc
na dowolnym Time
przekształcić go w miejscu na UTC, lub Time#getutc
aby powrócić nową równoważne Time
obiekt w UTC. Możesz wtedy zadzwonić pod numer Time#to_date
, aby uzyskać Date
. A więc: some_time.getutc.to_date
.
Jeśli używasz ActiveSupport’s time zone support (w zestawie z Rails), należy pamiętać, że jest to całkowicie odrębny od konstruktorów czasowych Ruby i nie wpływa na ich (to znaczy nie zmienia sposobu Time.now
lub Date.today
pracy). Zobacz także ActiveSupport extensions to Time
.
Wystąpienie Data jest reprezentowane jako Astronomiczny numer dnia juliańskiego; nie ma ułamkowej części dnia. Podczas gdy Dzień Julian jest względny względem GMT - technicznie rzecz biorąc, instancja Date powinna być uważana za GMT - w większości przypadków możesz to zignorować i traktować jako pozbawioną strefy czasowej. Pasowałbyś tylko do strefy czasowej, jeśli przekształcisz ją w DateTime lub Time.
Narzędzia ActiveSupport do konwersji na datę umożliwiają określenie czasu lokalnego lub czasu UTC.
Np
>> t = Date.today.to_time
=> Wed Apr 18 00:00:00 -0400 2012
>> t.zone
=> "EDT"
>> t = Date.today.to_time(:utc)
=> Wed Apr 18 00:00:00 UTC 2012
>> t.zone
=> "UTC"
Zobacz komentarz, który napisałem na @ AndrewMarshall w odpowiedzi na pytanie, dlaczego zadałem oryginalne pytanie. Zasadniczo, próbuję dowiedzieć się, czy Date.today w systemie lokalnym będzie taki sam jak Date.today w systemie w UTC. –
Jak mówi Andrew, Date.today generuje datę z czasu lokalnego, a nie UTC. Aby uzyskać datę odpowiadającą czasowi w UTC, spróbuj Time.now.utc.to_date –
Chciałbym tylko zwrócić uwagę, że chociaż w niektórych krajach ignorowanie strefy czasowej daty może zadziałać, tutaj w NZ otrzymasz niewłaściwą datę większość dnia pracy, jeśli to zrobisz. (np. 10 rano na miejscu 13 lutego jest, jak sądzę, 2100 UTC na 12). – Rich
można uciec za pomocą
Time.now.utc.to_date
w Ruby
Znacznie lepiej niż zaakceptowana odpowiedź. Zastanawiam się, czy to zostało dodane od kwietnia 2012 roku. –
to przydatne informacje, ale nie odpowiada na pytanie. odpowiada to na pytanie "jak mogę uzyskać datę bieżącego czasu UTC?", plakat zapytał, czy Date.today był w UTC czy nie, nie jak uzyskać datę w utc. –
Jeśli aplikacje Rails jest skonfigurowany do pracy w strefie czasowej UTC następnie wystarczy użyć Time.zone.today
, w przeciwnym razie wymuś go, używając: Time.now.utc.to_date
Można użyć
Date.current
Aby uzyskać aktualną datę w skonfigurowanej strefy czasowej.
- 1. Dlaczego Date.yesterday liczy się jako Date.today również?
- 2. Czy istnieje różnica między strefami czasowymi UTC i Etc/UTC?
- 3. Czy System.currentTimeMillis reprezentuje czas UTC?
- 4. Jaka jest różnica między Date.current a Date.today?
- 5. DATA UTC w Sequelize.js
- 6. Przesunięcie UTC w PHP
- 7. Przesunięcie UTC w minutach
- 8. Przypisanie czasu UTC w VBScript
- 9. zapytanie, gdzie data = Date.today z Railsami, MySQL i Active Record
- 10. Pobierz offset UTC w Ruby
- 11. Jak wyszukiwać wszystkie utworzone dzisiaj rekordy (północ UTC .. Teraz)
- 12. Jak uzyskać czas UTC
- 13. JavaScript Konwersja Data UTC
- 14. utworzyć javascript data UTC
- 15. konwersja pytz utc
- 16. Konwersja czasu lokalnego UTC
- 17. Dlaczego ZoneOffset.UTC! = ZoneId.of ("UTC")?
- 18. Java ResultSet jak getTimeStamp w UTC
- 19. Sklep Daty czasu UTC w bazie danych
- 20. Jak uzyskać czas utc w jQuery datetimepicker
- 21. Korzystanie z UTC z Sequel?
- 22. SensorEvent.timestamp na absolute (utc) timestamp?
- 23. Konwertuj na znacznik czasu UTC
- 24. ustawienie NSDate do aktualnej UTC
- 25. moment.js - UTC podaje niewłaściwą datę
- 26. Tworzenie czasu UTC w kodzie JavaScript
- 27. HowTo? CURRENT_TIMESTAMP w momencie strefa „UTC”
- 28. Przechowywanie Utc i Local datetime w Mongo
- 29. Quartz.net Twórz codzienny harmonogram w czasie UTC
- 30. Konwersja czasu lokalnego do UTC w Railsach
Dzięki za wyjaśnienia. Sądzę, że lepszym sposobem zadawania moich pytań byłoby "w połączeniu z jaką strefą czasową Date.today powraca następnego dnia?" Przypuszczam, że jeśli chcę "dzisiejszej daty w UTC", będę musiał zrobić coś w stylu 'Time.now.zone.to_date' (w Railsach). –
'Time.zone.now.to_date' użyje dowolnej strefy czasowej, w której jest skonfigurowana aplikacja. Warto zajrzeć do 'Time.use_zone ('[nazwa strefy]'), jeśli chcesz ustawić strefę czasową dla określonego bloku kodu, w tym przypadku dla UTC. –
Tak z zarządzaniem strefą czasową ActiveSupport, można zrobić "Time.zone.now.to_date", co równa się "Time.current.to_date" co równa się "Date.current". –