2013-01-31 3 views
20

В чем разница между strptime и strftime? Я вижу, что strptime - это метод в классе DateTime, а strftime - метод в классе Time.Как понять strptime vstr strftime

  1. Какая разница между Time и DateTime, кроме того, что они имеют различные методы ядра? Объяснение класса Time в документах Ruby полезно, но одно для DateTime просто говорит «datetime». Также есть класс Date, в котором говорится, что он обеспечивает Date и DateTime. Помогите мне разобраться в этом.
  2. Я вижу strptime, и я хочу произнести его «strip time», но это не имеет смысла. Есть ли для меня хорошее мнемоническое устройство?
  3. Что делать strptime и strftime означает, в любом случае?
  4. Как вы помните, что делает что?
+0

Учитывая, что «26.04.2012», чтобы сохранить в базе данных, вы будете разбирать, а затем форматировать: Date.strptime («04/26/2017», «% m /% d /% Y»). strftime ('% Y-% m-% d') – Donato

ответ

45

Разница между Time и DateTime связана с реализацией. DateTime происходит от мира Rails и является произвольной датой со временем суток. Это скорее система на основе календаря. Time измеряется как секунд с 1 января 1970 г. UTC и является агностиком часового пояса. В некоторых системах он ограничен значениями между 1901 и 2038 годами, ограничение того, как традиционно это значение сохраняется как 32-битное целое число, но более новые версии Ruby могут обрабатывать гораздо более широкий диапазон, используя 64-битное значение или BigNum как требуется.

Короче говоря, DateTime - это то, что вы получаете из базы данных в Rails, где время - это то, что традиционно используется Ruby. Если вы работаете со значениями, в которых важны даты, и вы хотите знать такие вещи, как в конце месяца или в какой день будет шесть недель вперед, используйте DateTime. Если вы просто измеряете прошедшее время и не заботитесь об этом, используйте Time. Их легко конвертировать, если необходимо.

Date С другой стороны, это только календарная дата и не имеет связанных времен. Вы можете использовать их там, где время не имеет значения.

strptime не подходит для "время разбора", где strftime предназначен для "форматирования времени". То есть strptime является противоположностью strftime, хотя они используют, как правило, ту же спецификацию форматирования. Я редко видел strptime, используемый с DateTime.parse, как правило, хорошо разбирается в происходящем, но если вам действительно нужно его прописать, обязательно используйте устаревший синтаксический анализатор.

+3

Вы хороший человек, @tadman и [тщательный] (http://www.youtube.com/watch?v=NMwB5uIWOOI) – nickcoxdotme

+1

Время и все его уродливые нюансы - одна из тех вещей, которые вы слишком много узнаете при написании программного обеспечения. «Сколько секунд в день?» примерно такая же, как «Что такое звук одной ладони?» – tadman

+1

Значения времени первоначально были основаны на аппаратных часах в системе Unix, поэтому они первоначально были ограничены значением, начинающимся с «эпохи», то есть когда появился nix. [Статья Википедии] (https://en.wikipedia.org/wiki/Unix_time) полезна. –

Смежные вопросы