Jak zmienić strefę czasową z DateTime w Rubim?
Czytanie, pisanie i serializowanie dat i godzin przy zachowaniu stałej strefy czasowej staje się denerwujące. Używam Ruby (i Rails 3.0) i próbuję zmienić strefę czasową DateTime. (w UTC), ale nie sam czas.
Chcę to:
t = DateTime.now
t.hour
-> 4
t.offset = 0
t.hour
-> 4
t.utc?
-> true
To jest najbliższe, do którego doszedłem, ale nie jest to intuicyjne.
t = DateTime.now
t.hour
-> 4
t += t.offset
t = t.utc
t.hour
-> 4
t.utc?
-> true
Czy jest lepszy sposób?
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
7 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
Anonimowy użytkownik
Potwierdzenie od:
Edit
: Ta odpowiedź nie uwzględnia informacji podanych w komentarzu do drugiej odpowiedzi, że chciałoby się, aby zgłaszane „godziny” były takie same po zmianie strefy czasowej.
Anonimowy użytkownik
Potwierdzenie od:
Więcej informacji tutaj
https://coderoad.ru/2695837/
Anonimowy użytkownik
Potwierdzenie od:
czas
http://ruby-doc.org/core/classes/Time.html... Więc pobierz aktualny czas lokalny, a następnie zwiększ go o przesunięcie czasu UTC i przekonwertuj na UTC, na przykład:
Chociaż, zgodnie z komentarzem Phrogza, jeśli chcesz tylko przechowywać znaczniki czasu niezależnie od lokalizacji, po prostu użyj aktualnego czasu UTC:
Anonimowy użytkownik
Potwierdzenie od:
wskazany przez @Sam, zmiana offsetu nie wystarczy i spowoduje błędy. Aby zapewnić odporność na ulepszenia zegara czasu letniego, konwersję należy wykonać w następujący sposób:
Anonimowy użytkownik
Potwierdzenie od:
strefa czasowa w formacie ciągu, np. „Czas pacyficzny (Stany Zjednoczone i Kanada)”
To najlepszy sposób, jaki znalazłem:
<pre class="lang-rb prettyprint-override">
datetime.change(ActiveSupport::TimeZone[time_zone_string].formatted_offset(false))
Anonimowy użytkownik
Potwierdzenie od:
config.time_zone = 'Mumbai'
Oficjalną dokumentację w tej sprawie można znaleźć tutaj:
http://api.rubyonrails.org/cla ... .html
http://api.rubyonrails.org/cla ... .html
Inną opcją jest ustawienie „Monkey Patch” klasy „DateTime”.