Jeśli tak d = DateTime.now
, jak zamienić „d” na UTC (z odpowiednią datą)?
97
d = DateTime.now.utc
Ups!
To wydaje się działać w Railsach, ale nie w waniliowym Ruby (i oczywiście o to chodzi w pytaniu)
d = Time.now.utc
Działa jednak.
Czy jest jakiś powód, dla którego musisz używać, DateTime
a nie Time
? Time
powinien zawierać wszystko, czego potrzebujesz:
irb(main):016:0> Time.now
=> Thu Apr 16 12:40:44 +0100 2009
będzie działać w standardowym Rubim (tj. bez ActiveSupport).
źródło
new_offset
argument metody domyślnie0
już. WięcDateTime.now.new_offset
może być również używany.Niestety, klasa DateTime nie ma wygodnych metod dostępnych w klasie Time, aby to zrobić. Możesz przekonwertować dowolny obiekt DateTime na UTC w następujący sposób:
Możesz przełączyć się z czasu UTC na czas lokalny za pomocą:
gdzie
d
jest obiektem DateTime w czasie UTC. Jeśli chcesz, aby były to wygodne metody, możesz je utworzyć w następujący sposób:Możesz to zobaczyć w akcji w następującej sesji IRB:
Jak widać powyżej, początkowy obiekt DateTime ma przesunięcie -04: 00 (czas wschodni). Jestem w czasie pacyficznym z przesunięciem -07: 00. Wywołanie
localtime
zgodnie z wcześniejszym opisem prawidłowo konwertuje obiekt DateTime na czas lokalny. Wywołanieutc
obiektu poprawnie konwertuje go na przesunięcie czasu UTC.źródło
Spróbuj tego, działa w Rubim :
źródło
Możesz ustawić ENV, jeśli chcesz
Time.now
iDateTime.now
odpowiadać w czasie UTC.źródło
W irb:
zamieni czas na utc. Ale jak napisano, jeśli jest to tylko czas, możesz użyć:
i otrzymaj to od razu.
źródło
Ciąg reprezentujący DateTime może być analizowany przez klasę Time.
źródło