首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >及时计算与复活节有关的事件

及时计算与复活节有关的事件
EN

Stack Overflow用户
提问于 2019-06-11 15:29:02
回答 1查看 126关注 0票数 0

假设约翰的周年纪念日正好在复活节。约翰尼的周年纪念日总是在复活节后的一周。埃伦的结婚纪念日是五旬节前一周(复活节后42天)。

我怎么能用一个shell脚本,计算出他们生日的日期(编号和日期)和月份。未来的岁月。

我知道,我可以用ncal -e "year"计算复活节的日期。在C中是我所做的:

代码语言:javascript
复制
typedef struct {
  int day;
  int month;
  int year;
} Date;

然后,我计算复活节(用高斯的算法)。并将日、月、年返回到五旬节函数,该函数接受day+49,减少日期,并增加月份。

因此:

  1. 在shell中,如何使用shell将ncal -e输出从“2019年1月1日”转换为"1 1 2019“。
  2. 如果我有这个,你如何开始制定规则,为上面的故事。(生日)
代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-11 17:52:33

只需编写一个调用ncal -e的函数

代码语言:javascript
复制
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
}

然后

代码语言:javascript
复制
$ 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

如果选择,请使用不同的日期格式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56547068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档