2013-01-31 17 views
20

Was ist der Unterschied zwischen strptime und strftime? Ich sehe, dass strptime ist eine Methode in der DateTime Klasse, und strftime ist eine Methode in der Time Klasse.So verstehen Sie strptime vs. strftime

  1. Was ist der Unterschied zwischen Time und DateTime, außer dass sie unterschiedliche Kernmethoden haben? Die Erklärung für die Klasse Time in den Ruby-Dokumenten ist hilfreich, aber die für DateTime sagt nur "datetime". Es gibt auch die Date Klasse, die besagt, dass es Date und DateTime bietet. Hilf mir, das zu verstehen.
  2. Ich sehe strptime und ich möchte es "strip time" aussprechen, aber das macht keinen Sinn. Gibt es ein gutes Mnemonic-Gerät dafür?
  3. Was bedeuten strptime und strftime eigentlich?
  4. Wie erinnerst du dich, was macht was?
+0

Mit "04/26/2017" würden Sie, um in der Datenbank zu speichern, analysieren und dann formatieren: Date.strptime ("26.04.2017", "% m /% d /% Y"). strftime ('% Y-% m-% d') – Donato

Antwort

45

Der Unterschied zwischen Time und DateTime hat mit der Implementierung zu tun. DateTime kommt aus der Rails-Welt und ist ein beliebiges Datum mit Uhrzeit. Es ist eher ein kalenderbasiertes System. Time wird als Sekunden seit dem 1. Januar 1970 UTC gemessen und ist zeitzonenunabhängig. Auf einigen Systemen ist es auf Werte zwischen 1901 und 2038 beschränkt, eine Beschränkung, wie traditionell dieser Wert als eine 32-Bit-Ganzzahl mit Vorzeichen gespeichert wird, aber neuere Versionen von Ruby können einen viel größeren Bereich unter Verwendung eines 64-Bit-Werts oder BigNum verarbeiten nach Bedarf.

Kurz gesagt, DateTime ist, was Sie von einer Datenbank in Rails bekommen, wo Zeit ist, was Ruby traditionell verwendet hat. Wenn Sie mit Werten arbeiten, bei denen Datumsangaben wichtig sind und Sie Informationen zum Ende des Monats oder zu dem Tag, an dem es sechs Wochen voraus ist, wissen möchten, verwenden Sie DateTime. Wenn Sie nur die verstrichene Zeit messen und sich nicht darum kümmern, verwenden Sie Zeit. Sie sind leicht zu konvertieren, wenn nötig.

Date auf der anderen Seite ist nur ein Kalenderdatum und hat keine damit verbundenen Zeiten. Vielleicht möchten Sie diese verwenden, wenn Zeiten irrelevant sind.

strptime ist die Abkürzung für "parse time", wobei strftime für "Formatierungszeit" steht. Das heißt, strptime ist das Gegenteil von strftime, obwohl sie praktisch die gleiche Formatierungsspezifikation verwenden. Ich habe selten gesehen strptime verwendet, da DateTime.parse ist in der Regel gut zu erfassen, was los ist, aber wenn Sie wirklich buchstabieren müssen, auf jeden Fall den Legacy-Parser verwenden.

+3

Du bist ein guter Mann, @tadman, und [gründlich] (http://www.youtube.com/watch?v=NMwB5uIWOOI) – nickcoxdotme

+1

Zeit und alles von Seine hässlichen Nuancen sind eines der Dinge, über die man beim Schreiben von Software viel zu viel lernt. "Wie viele Sekunden gibt es an einem Tag?" ist ungefähr das Gleiche wie "Was ist der Klang einer Hand, die klatscht?" – tadman

+1

Zeitwerte basierten ursprünglich auf dem Hardware-Takt in einem Unix-System, weshalb sie ursprünglich auf einen Wert begrenzt waren, der bei der "Epoche" begann, d. H. Als * nix auftrat. [Wikipedia Artikel] (https://en.wikipedia.org/wiki/Unix_time) ist nützlich. –