Как проверить, что конец месяца приходится на выходные?

Я нашел решение. Вот мой Dockerfile:

FROM i386/ubuntu:16.04

RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y dbus

COPY dbus.conf /etc/dbus-1/session.d/

ENTRYPOINT ["dbus-run-session", "slaveApp"]

И мой dbus.conf:




    tcp:host=localhost,bind=*,port=6667,family=ipv4
    unix:tmpdir=/tmp
    ANONYMOUS
    

И установите переменную адреса на хосте:

export DBUS_SESSION_BUS_ADDRESS=tcp:host=${containerIp},port=6667,family=ipv4

В моем главном приложении я инициирую соединение (Я использовал Qt):

 QDBusConnection::connectToBus("tcp:host=${containerIp},port=6667", "qt_default_session_bus"); 

Главное приложение теперь может отправлять сообщения подчиненному приложению. Однако я не пытался отправлять сообщения от ведомого к ведущему.

Ответ взят из этого поста :https://stackoverflow.com/a/45487266/6509266

-3
16.11.2020, 08:46
2 ответа

Использование GNUdate:

[[ $(date -d "-$(date +%d)days month" +%u) = [67] ]] && echo 'Month-End falls on weekend'

Обычно date -d "-$(date +%d)days month"означает минус дни текущего месяца и добавить месяц к результату; это на самом деле:

date -d'-XXX days + 1month'

где мы вычисляем и получаем XXXдней с date +%d.


тест на январь -2021 , который заканчивается в выходные:

[[ $(date -d "-$(date +%d)days 3month" +%u) = [67] ]] && echo 'Month-End falls on weekend'

из man date , %u— это ФОРМАТ управления днями недели (1..7 ); 1 это Понедельник . поэтому измените 6 и 7 выше в зависимости от календаря вашего региона на выходные дни.

5
18.03.2021, 22:49

С оболочкой ksh93:

month='this month'
month='2020-11'
month='November 2020'
if [[ ${ printf '%(%u)T' "last day in $month"; } = [67] ]]; then
  print "Last day in $month falls on a weekend"
fi

В оболочке zshпроверка того, что первый день следующего месяца приходится на воскресенье или понедельник:

zmodload zsh/datetime

strftime -s month %Y-%m # this month
month=2020-11           # given month

last_day_on_a_weekend() {
  local TZ=UTC0 y m t

  y=${1%-*} m=${1#*-}
  if (( ++m > 12 )); then
    (( y++ )); m=1
  fi
    
  strftime -rs t %Y-%m-%d $y-$m-1
  strftime -s t %u $t

  [[ $t = [71] ]]
}

if last_day_on_a_weekend $month; then
  print "Last day in $month falls on a weekend"
fi
3
18.03.2021, 22:49

Теги

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