1

X ++方法来计算复活节星期天?

4

2 回答 2

1
static date dateOfEaster(Yr y)
{
    int a = y mod 19;
    int b = y div 100;
    int c = y mod 100;
    int d = b div 4;
    int e = b mod 4;
    int f = (b+8) div 25;
    int g = (b-f+1) div 3;
    int h = (19*a+b-d-g+15) mod 30;
    int i = c div 4;
    int k = c mod 4;
    int l = (32+2*e+2*i-h-k) mod 7;
    int m = (a+11*h+22*l) div 451;
    int n = (h+l-7*m+114) div 31;
    int p = (h+l-7*m+114) mod 31;
    return mkdate(p+1,n,y);
}
于 2012-06-15T09:59:57.447 回答
1

我有点创意,因此您可以使用 GET 和公共 Web 服务和一点递归来枚举给定年份的所有假期。随心所欲地玩这个。只需复制/粘贴到作业:

static void HolidayWebService(Args _args)
{
    System.Net.WebClient webClient = new System.Net.WebClient();
    str holidaysAvailable   = "http://www.holidaywebservice.com/HolidayService_v2/HolidayService2.asmx/GetHolidaysAvailable?countryCode=UnitedStates";
    str holidayDate         = "http://www.holidaywebservice.com/HolidayService_v2/HolidayService2.asmx/GetHolidayDate?countryCode=%1&holidayCode=%2&year=%3";
    str retVal              = webClient.DownloadString(holidaysAvailable);


    XMLDocument doc=XMLDocument::newXml(retVal);
    XmlNamedNodemap     attributes;
    XmlElement          root = doc.root();
    XmlNode             node = root.firstChild();


    void getHolidayDate(str _holidayCode, Yr _yr = datetimeutil::year(datetimeutil::utcNow()), str _countryCode = 'UnitedStates')
    {
        System.Net.WebClient webClientInner = new System.Net.WebClient();
        str locRetVal;
        ;

        try
        {

            locRetVal = webClientInner.DownloadString(strfmt(holidayDate, _countryCode, _holidayCode, _yr));

            info(strfmt("[%1] %2", _holidayCode, locRetVal));

        }
        catch
        {
            error(strfmt("Error with %1, %2, %3", _holidayCode, _yr, _countryCode));
            continue;
        }
    }

    void dig(XmlNode _node, int _depth = 0)
    {
        XmlNode sib;
        ;

        if (_node == null)
            return;

        if (_node.hasChildNodes())
            dig(_node.firstChild(), (_depth+1));
        else
        {
            if (_node.parentNode().name() == 'CODE')
                getHolidayDate(_node.innerText());
        }


        sib = _node.nextSibling();

        if (sib)
            dig(sib);
    }
    ;

    dig(node);

}
于 2012-06-15T16:09:35.360 回答