2013-01-31 19 views
20

Jaka jest różnica między strptime i strftime? Widzę, że strptime jest metodą w klasie DateTime, a strftime jest metodą w klasie Time.Jak rozumieć strptime vs. strftime

  1. Jaka jest różnica między Time i DateTime, poza tym, że mają różne metody podstawowe? Wyjaśnienie klasy Time w dokumentach Ruby jest pomocne, ale ta dla DateTime mówi "datetime". Istnieje również klasa Date, która mówi, że zapewnia ona Date i DateTime. Pomóż mi to zrozumieć.
  2. Widzę strptime i chcę go wymówić "czas pasków", ale to nie ma sensu. Czy istnieje dla niego dobre urządzenie mnemoniczne?
  3. Co to znaczy strptime i strftime?
  4. Jak pamiętasz, co robi co?
+0

Zważywszy "26.04.2017", w celu przechowywania w bazie danych, by analizować, a następnie format: Date.strptime ("26.04.2017", '% m /% d /% Y'). strftime ('% Y-% m-% d') – Donato

Odpowiedz

45

Różnica między Time a DateTime ma związek z wdrożeniem. DateTime pochodzi ze świata Rails i jest arbitralną datą z porą dnia. Jest to bardziej system oparty na kalendarzu. Time jest mierzona jako sekundy od 1 stycznia 1970 roku UTC i nie jest zależna od strefy czasowej. W niektórych systemach jest on ograniczony do wartości między 1901 a 2038 r., Co ogranicza tradycyjnie zapisywanie tej wartości jako 32-bitową liczbę całkowitą ze znakiem, ale nowsze wersje Ruby mogą obsługiwać znacznie szerszy zakres, używając wartości 64-bitowej lub BigNum jako wymagane.

W skrócie, DateTime jest to, co dostajesz z bazy danych w Railsach, gdzie czas jest tradycyjnie używany przez Ruby. Jeśli pracujesz z wartościami, w których daty są ważne i chcesz wiedzieć, na przykład o końcu miesiąca lub o dniu, w którym będzie to 6 tygodni, skorzystaj z narzędzia DateTime. Jeśli tylko mierzysz upływ czasu i nie przejmuj się tym, użyj czasu. W razie potrzeby można je łatwo przekonwertować.

Date z drugiej strony to tylko datę w kalendarzu i nie ma żadnych związanych razy. Możesz ich użyć tam, gdzie czasy są nieistotne.

strptime jest skrótem od "czas analizy", gdzie strftime służy do "czasu formatowania". Oznacza to, że strptime jest przeciwieństwem strftime, chociaż używają one, dogodnie, tej samej specyfikacji formatowania. Rzadko widziałam, że strptime używany od DateTime.parse jest zwykle dobry w zbieraniu informacji o tym, co się dzieje, ale jeśli naprawdę musisz to przeliterować, koniecznie użyj starszego parsera.

+3

Jesteś dobrym człowiekiem, @tadmanem i [dokładnym] (http://www.youtube.com/watch?v=NMwB5IWOOI) – nickcoxdotme

+1

Czas i wszystkie jej brzydkie niuanse to jedna z tych rzeczy, o których za dużo się dowiadujesz podczas pisania oprogramowania. "Ile sekund jest w ciągu dnia?" jest mniej więcej taki sam jak "Jaki jest dźwięk klaskania jednej ręki?" – tadman

+1

Wartości czasu pierwotnie opierały się na zegarze sprzętowym w systemie uniksowym, dlatego początkowo były ograniczone do wartości zaczynającej się od "epoki", tj. Kiedy * nix doszło. [Artykuł Wikipedii] (https://en.wikipedia.org/wiki/Unix_time) jest przydatny. –