Солярис: найдите день прошлого понедельника, во вторник, … в воскресенье посредством сценария оболочки

Я подозреваю, что ntp не обновляют время Вашего сервера, потому что разница является слишком небольшой. У меня была подобная проблема, я видел ту же задержку каждый день, пока я не узнал, что быть небольшими ntp различия не обновит, пока определенный порог не будет присутствовать.

Проверьте Вас конфигурация на минимальный порог для синхронизации.

3
17.01.2013, 21:58
3 ответа

Я сделал бы:

perl -MPOSIX -le '
  @t=localtime;
  print strftime "%Y/%m/%d", 
    localtime time - 86400*(($t[6]-1+7-$ARGV[0])%7+1)' 4

(где 4 выше день недели, 0 в течение воскресенья, 4 в течение четверга),

perl обычно самая безопасная опция для портативного управления датой.

4
27.01.2020, 21:14

Так как отправленные вопросы просят ksh или колотят ответ за простой ванильный Солярис 'X', я предполагаю, что я не в рамках инструкций, но если бы можно установить Tcl 8.5, у Вас был бы доступ к мощной команде часов для арифметики даты/времени:

Вызов tclsh...

% set delta 7                                
7
% clock format [clock scan "now - $delta days"]
Fri Jan 11 00:00:00 EST 2013
0
27.01.2020, 21:14
  • 1
    Не волнуйтесь, ни один из других ответов до сих пор не использует чистую оболочку + Солярис date так или иначе. –  jw013 18.01.2013, 18:51
  • 2
    @jw013, вопрос OP также используется expr и echo таким образом, мы можем предположить, что можем использовать любую команду, доступно в ванильном Солярисе 10 установок. –  Stéphane Chazelas 18.01.2013, 22:09

Сценарий оболочки + дата не является действительно самым подходящим инструментом здесь. Ответ жемчуга, данный уже, хорош, хотя я предпочитаю явность Python:

import datetime, sys

today = datetime.date.today()
wd = today.weekday() # Mon == 0, Sun == 6
wd_wanted = int(sys.argv[1])

date_wanted = today - datetime.timedelta((wd-wd_wanted)%7 or 7)

or 7 бит решает в прошлый понедельник, когда сегодня проблема в понедельник.

2
27.01.2020, 21:14

Теги

Похожие вопросы