Годовые даты Руби? - PullRequest
       11

Годовые даты Руби?

2 голосов
/ 02 января 2011

Есть ли способ представить даты, например, 12/25, без информации о году? Я имею в виду просто использовать массив [month, year], если нет лучшего способа.

Ответы [ 3 ]

3 голосов
/ 02 января 2011

Вы могли бы использовать класс Date и жестко установить год в високосный год (чтобы вы могли представлять 2/29, если хотите). Это было бы удобно, если бы вам нужно было выполнить «дистанционные» вычисления между двумя датами (при условии, что вам не нужно переносить границы года и что вам не нужны однодневные ответы, полученные при пересечение 2/29 неправильно в течение нескольких лет).

Это также может быть удобно, поскольку вы можете использовать #strftime для отображения даты как (например) «3 марта», если хотите.

Однако, в зависимости от использования, я думаю, что я, вероятно, представлял бы их явно, либо в парном массиве, либо как-то вроде YearlessDate = Struct.new(:month,:day). Таким образом, вы не будете склонны делать ошибки, подобные упомянутым выше.

Однако у меня никогда не было свидания, которое на самом деле не было связано с годом. Если предположить, что это так, то ответ @ SeanHill - лучший: сохраняйте информацию о году, но не отображайте ее пользователю, когда она не подходит.

1 голос
/ 02 января 2011

Вы бы использовали функцию strftime из класса Time.

time = Time.now
time.strftime("%m/%d")
0 голосов
/ 16 января 2013

Самый «правильный» способ представления даты без года - это Fixnum между 001 и 365. Вы можете сравнивать их без необходимости превращать их в дату и легко создавать дату для данного годапо мере необходимости, используя Date.ordinal

...