Исчисление даты в Linux возвращает странный результат за 2 месяца назад - PullRequest
0 голосов
/ 31 января 2012

Когда я пытаюсь получить месяц до последнего с сегодняшнего дня, я запускаю «date --date‘ 2 month ago ». Но я запускаю эту команду 31 января, она возвращается в декабре. Я думаю, что это должно вернуться в ноябре.

Вы знаете, как получить месяц до последнего с помощью команды date?

Добавлено в 17:30 (JST): Если это исчисление даты написано на Python, я буду использовать dateutil, и его выражение будет естественным, как показано ниже:

from datetime import *; from dateutil.relativedelta import *
today = date.today()
twomonthago = today + relativedelta(months=-2)

Итак, мне интересно, как я могу написать так же в оболочке bash.

Добавлено в 18:05 (JST): Кажется, что не только прошедший месяц, но и обработка в будущем месяце - та же странность.

$ date --date '+1 month'
Fri Mar  2 17:42:37 JST 2012

$ date --date '+2 month'
Sat Mar 31 17:42:56 JST 2012

$ date --date '+3 month'
Tue May  1 17:42:59 JST 2012

Февраль и апрель отсутствуют.

Ответы [ 2 ]

1 голос
/ 31 января 2012

Когда вы спрашиваете «2 месяца назад» 31 января, он дает вам 31 ноября - которого не существует, поэтому он переносится на 1 декабря.

Вы будетенужно манипулировать только частью месяца, если это то, что вы хотите сделать.Это покажет два месяца до этого как число:

echo $(( ($(date +%m)+9)%12+1 ))

и отформатирует его как название месяца:

date --date $(printf "%.2d/01" $(( ($(date +%m)+9)%12+1 ))) +%B
1 голос
/ 31 января 2012

Вы можете думать о 2 месяцах до 31 января как о 31 ноября, за исключением того, что в ноябре только 30 дней. Какой именно ответ вы искали?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...