Расчет событий во времени относительно Пасхи - PullRequest
0 голосов
/ 11 июня 2019

Скажем, Джон, его юбилей точно на Пасху.Джонни, его годовщина - это всегда неделя после пасхи.А у Елены ее юбилей за неделю до Пятидесятницы (42 дня после Пасхи).

Как мне с помощью сценария оболочки вычислить день (число и название дня) и месяц их дня рождения.На все последующие годы.

Я знаю, что могу вычислить день Пасхи с ncal -e "year".В C то, что я сделал:

typedef struct {
  int day;
  int month;
  int year;
} Date;

Затем я вычисляю день Пасхи (с помощью алгоритма Гаусса).И верните день, месяц, год в функцию пятидесятницы, которая принимает день + 49, уменьшает день и увеличивает месяц.

Таким образом:

  1. Как в оболочке преобразовать вывод ncal -e из «1 января 2019 года» в «1 1 2019» только с оболочкой.
  2. Если бы у меня было это, как бы вы начали создавать правила для истории выше.(На дни рождения)
Date easter(int Y)
{
    Date date;
    int C = floor(Y/100);
    int N = Y - 19*floor(Y/19);
    int K = floor((C - 17)/25);
    int I = C - floor(C/4) - floor((C - K)/3) + 19*N + 15;
    I = I - 30*floor((I/30));
    I = I - floor(I/28)*(1 - floor(I/28)*floor(29/(I + 1))*floor((21 - N)/11));
    int J = Y + floor(Y/4) + I + 2 - C + floor(C/4);
    J = J - 7*floor(J/7);
    int L = I - J;
    int M = 3 + floor((L + 40)/44);
    int D = L + 28 - 31*floor(M/4);

    date.d = D;
    date.m = M;
    date.y = Y;
    return date;
}

1 Ответ

2 голосов
/ 11 июня 2019

Просто напишите функцию, которая вызывает ncal -e

easter() {
    local year=${1:-$(date "+%Y")}   # use this year if no arg provided
    local easter=$(ncal -e "$year")  # month day year
    date -d "$easter" "+%F"          # YYYY-mm-dd
}

Затем

$ easter
2019-04-21
$ easter 2018
2018-04-01
$ easter 2020
2020-04-12
$ date -d "$(easter) - 1 week" "+%F"
2019-04-14
$ date -d "$(easter) + 1 week" "+%F"
2019-04-28

Используйте другой формат даты, если вы выберете.

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