Intereting Posts
Преобразование папки изображений в многостраничный файл pdf с помощью инструментов командной строки? Linux Kernel 3.x новая схема управления версиями Опция -F для ls Можно ли рассказать Xorg, чтобы он не слушал абстрактное сокет badblocks и «end_request: ошибка ввода-вывода» на выходе Экран GNU: как использовать: aclumask для установки разрешений для неизвестных пользователей? Резервное копирование с помощью find и ssh для сервера вне сайта Почему мы не видим ни одного дефиса из $ 0 в оболочке входа, вызванной опцией `–login`? Обновление tar.gz ежедневно только с измененными файлами Как использовать аутентификацию LDAP Zimbra для svn KDE Как переключаться между 4 раскладками клавиатуры? как монтировать UUID без использования / etc / fstab Помогите мне найти динамики и наушники (название устройства PCM) Как узнать, как долго сокет находится в CLOSE_WAIT? Как отключить предупреждающее сообщение для репозиториев Apt с использованием SHA1?

Как получить предыдущий год и предыдущий месяц в Solaris 8

Как получить предыдущий год и предыдущий месяц в Solaris 8?

Я пробовал команду ниже, но никто из них не прав:

date +'%m' -d 'last month' date +'%Y' -d 'last year' 

date Solaris не поддерживает параметр -d например, date GNU.

Вы можете использовать perl :

 $ perl -MPOSIX=strftime -le '@t = localtime; $t[3] = 1; $t[4]--; print strftime("%m", @t)' 05 $ perl -MPOSIX=strftime -le '@t = localtime; $t[3] = 1; $t[5]--; print strftime("%Y", @t)' 2013 

Или если у вас есть ksh93 :

 $ printf "%(%m)T\n" "last month" 05 $ printf "%(%Y)T\n" "last year" 2013 

обновленный

Для комментария @ glennjackman я нашел документацию в модуле Time :: Piece :

  The months and years can be negative for subtractions. Note that there is some "strange" behaviour when adding and subtracting months at the ends of months. Generally when the resulting month is shorter than the starting month then the number of overlap days is added. For example subtracting a month from 2008-03-31 will not result in 2008-02-31 as this is an impossible date. Instead you will get 2008-03-02. This appears to be consistent with other date manipulation tools. 

Поскольку OP только хочет получить предыдущий год и месяц, мы можем установить $t[3] = 1 чтобы исправить эту проблему.

Корректировка идеи perl (Есть проблема с этим решением в январе месяце, да?).

Последний месяц:

 $ perl -MPOSIX=strftime -le '@t = localtime; @l = localtime (time - @t[3] * 86400); print strftime("%m", @l)' 

Tcl имеет действительно хорошую дату и время, если вы его установили:

 tclsh <<END puts [clock format [clock scan "-1 month"] -format "%m"] puts [clock format [clock scan "-1 year"] -format "%Y"] END