UNIX - формат даты вчера - PullRequest
       13

UNIX - формат даты вчера

2 голосов
/ 10 января 2012

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

Скрипт, который я сейчас использую, использует bash и получает дату, используя

date '+%m %d %Y'

Однако, это возвращает 20120110 на сегодняшний день, но за вчерашний день оно вернуло 2012019 , мне нужно это, чтобы вернуть 201201 * 0 * 9 .

Есть идеи?

Спасибо

P.S. Я не могу установить что-либо еще на этот сервер, поэтому GNU или Perl отсутствуют.

Ответы [ 4 ]

4 голосов
/ 10 января 2012

Вы пробовали: date +%Y%m%d.

$ date +%Y%m%d
20120110

$ date -d yesterday +%Y%m%d
20120109
1 голос
/ 10 января 2012

Ваш вызов date на самом деле работает нормально.

Реальная проблема в том, что в вашем bash-скрипте (который находится в комментариях к другому ответу) вы выполняете некоторую арифметику с результирующими значениями, ипоследующая конкатенация этих значений теряет ведущие нули.

Итак, в вашем bash-скрипте после того, как вы вычислили новые значения $YEAR, $MONTH и $DAY, используйте это, чтобы получитьправильное имя файла вывода:

SOURCEFILE=`printf "DNXOUT-%04d%02d%0d2.txt" $YEAR $MONTH $DAY`

т.е. просто используйте исполняемый файл командной строки printf (который, вероятно, существует) для форматирования имени файла.

0 голосов
/ 05 апреля 2012

С учетом приведенных выше ответов и ваших замечаний это поможет узнать вашу платформу и причину, по которой вам нужна дата в этом формате. На платформе лучше всего посмотреть параметры даты, перечисленные в руководстве man date или во встроенной справке date -h.

С другой стороны, если вам нужна спецификация даты типа ггггммдд, чтобы получить сортируемое число или имя, то вы также можете использовать время эпохи: секунды с 1 января 1970 года. Это также достаточно хорошо работает для вычисления времени , Просто добавьте / вычтите 3600 за каждый час или (3600 * 24) за каждый день и тому подобное. В конце концов, это даже часовой пояс и DST безопасно.

Если это поможет, я слышал, что yyyymmdd (или yyyymmddHHMMSS) способ написать спецификацию даты / времени называется 'iso', однако я могу быть здесь.

0 голосов
/ 10 января 2012

Если вы работаете в системе POSIX, в руководстве говорится, что %d - для числа месяца с добавлением нуля, поэтому date '+%m %d %Y' должно работать, хотя указанный вами формат на самом деле date '+%Y%m%d'.

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