Сценарий Linux - Дата Манипуляции - PullRequest
6 голосов
/ 10 июня 2011

Я установлю одну переменную даты (скажем, '08 -JUN-2011 '), и я хочу провести некоторые расчеты на основе этой даты, а именно:
1. Необходимо получить первый день месяца данного дня.
2. Предыдущая дата месяца данной даты.
3. Последний день месяца данной даты.

Все, что я знаю, это манипулирование с использованием текущей системной даты и времени, но я не знаю, как это сделать.реализовать с определенной пользователем датой.Мне нужно, чтобы это было достигнуто с помощью сценария оболочки Linux.

Любая помощь будет оценена.

Спасибо,
Картик

Ответы [ 5 ]

10 голосов
/ 10 июня 2011

Вот как выполнить манипуляции с использованием даты GNU:

#!/bin/sh

USER_DATE=JUN-08-2011

# first day of the month
FIRST_DAY_OF_MONTH=$(date -d "$USER_DATE" +%b-01-%Y)

PREVIOUS_DAY=$(date -d "$USER_DATE -1 days" +%b-%d-%Y)

# last day of the month
FIRST_DAY_NEXT_MONTH=$(date -d "$USER_DATE +1 month" +%b-01-%Y)
LAST_DAY_OF_MONTH=$(date -d "$FIRST_DAY_NEXT_MONTH -1 day" +%b-%d-%Y)

echo "User date: $USER_DATE"
echo "1. First day of the month: $FIRST_DAY_OF_MONTH"
echo "2. Previous day: $PREVIOUS_DAY"
echo "3. Last day of the month: $LAST_DAY_OF_MONTH"

Вывод:

User date: JUN-08-2011
1. First day of the month: Jun-01-2011
2. Previous day: Jun-07-2011
3. Last day of the month: Jun-30-2011
3 голосов
/ 10 июня 2011

Поскольку вы используете Linux, надеюсь, у вас есть утилита даты GNU.Он может обрабатывать практически любое описание относительной даты, о котором вы думаете.

Вот несколько примеров

date --date="last month" +%Y-%m-%d
date --date="yesterday" +%Y-%m-%d
date --date="last month" +%b
x=$(date --date "10 days ago" +%Y/%m/%d)

Подробнее об этом см. Примеры даты GNU

Как только вы используете его, вы можете сократить сбор информации с помощью date --help, который показывает все основные параметры (но иногда это трудно интерпретировать.)

Надеюсь, это поможет.

3 голосов
/ 10 июня 2011

Это будет запутано в сценарии оболочки.Вам лучше использовать Date :: Manip в Perl или что-то подобное на другом полнофункциональном языке.Тем не менее, я могу придумать несколько способов сделать это с помощью команды date.Прежде всего, вы можете использовать параметр --date, чтобы установить начальную точку для даты, например, так:

$ date --date='08-JUN-2011'
Wed Jun  8 00:00:00 EDT 2011

Вы можете получить предыдущую дату, например:В последний день месяца я бы просто возвращался с 31 до тех пор, пока свидание не провалится.Вы можете проверить $?за это

$ date --date='31-JUN-2011';echo $?
date: invalid date `31-JUN-2011'
1
$ date --date='30-JUN-2011';echo $?
Thu Jun 30 00:00:00 EDT 2011
0

за первый день месяца ... обычно это 01:)

0 голосов
/ 05 февраля 2014

Использование инструмента dateutils dround :

Текущий месяц:

$ dround today -1
2014-02-01

Предыдущий месяц

$ dround today -31
2014-01-31

Последний день текущего месяца:

$ dround today +31
2014-02-28

Конечно, вы можете использовать пользовательскую дату вместо today, идея заключается в том, чтобы округлять или увеличивать до нужного дня месяца, например, следующее первое число данного месяца 2010-10-04:

$ dround 2010-10-04 +1d
2010-11-01
0 голосов
/ 01 октября 2013
$ date +%m/01/%Y

Я пришел сюда в поисках способа получить первый день текущего месяца.

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