Можно ли вычислить китайский зодиак, или я должен использовать таблицу поиска?

Я создаю приложение, которое скажет ваш китайский знак. Я огляделся, но только нашел графики (с 1900 по 2020 год), и никакой логики для создания чего-то более динамичного.

Нет ли логики для определения китайского зодиака?

Ответ 1

Отвечает ли это на ваш вопрос:

public string get_ChineseZodiac(System.DateTime date)
{
    System.Globalization.EastAsianLunisolarCalendar cc = 
          new System.Globalization.ChineseLunisolarCalendar();
    int sexagenaryYear = cc.GetSexagenaryYear(date);
    int terrestrialBranch = cc.GetTerrestrialBranch(sexagenaryYear);

    // string[] years = "rat,ox,tiger,hare,dragon,snake,horse,sheep,monkey,fowl,dog,pig".Split(',');
    // string[] years = "Rat,Ox,Tiger,Rabbit,Dragon,Snake,Horse,Goat,Monkey,Rooster,Dog,Pig".Split(',');
    // string[] years = new string[]{ "rat", "ox", "tiger", "hare", "dragon", "snake", "horse", "sheep", "monkey", "fowl", "dog", "pig" };    
    string[] years = new string[]{ "Rat", "Ox", "Tiger", "Rabbit", "Dragon", "Snake", "Horse", "Goat", "Monkey", "Rooster", "Dog", "Pig" };

    return years[terrestrialBranch - 1];
} // End Function get_ChineseZodiac

Ответ 2

Используя калькулятор

2013-4=2009
2009/12= 167.41666
167*12=2004
2009-2004=5 (5 is snake which was the animal for 2013)

Ответ 3

Если вы серьезно относитесь к поиску не табличного механизма для расчета лет китайского зодиака, то я рекомендую посмотреть 'Календарные вычисления, 3-е издание', который имеет (LISP) код для обработки расчетов для китайского Нового года, и из этого, выведя Год < релевантного животного > прямолинейно. Эта книга охватывает многие календарные системы и интересна для чтения. Будучи лунно-солнечным календарем, китайский календарь довольно сложный; математика становится довольно детализированной.

Скорее всего, проще и, вероятно, более компактно, по коду, использовать таблицу.

Ответ 4

В Википедии есть ссылка на 2044.

http://en.wikipedia.org/wiki/Chinese_zodiac

Используя Год Крысы в ​​качестве примера (в течение многих лет после 1984 года), он выглядит так: каждый цикл крыс:

383, 353, 353, 383, 354 days

Обратите внимание, что последний цикл 354, что более чем вероятно из-за Leap Year. Возможно, используя эту формулу, вы можете работать в любом году до 2100 или около того.

Я использовал следующий T-SQL для вывода этих чисел

select DATEDIFF(D,'02/2/1984', '02/19/1985')
select DATEDIFF(D,'02/19/1996', '02/6/1997')
select DATEDIFF(D,'02/7/2008', '01/25/2009')
select DATEDIFF(D,'01/25/2020', '02/11/2021')
select DATEDIFF(D,'02/11/2032', '01/30/2033')

Ответ 5

Используйте это для расчета года.

<?php

$year = 2013;
    switch (($year - 4) % 12) {
        case  0: $zodiac = 'Rat';       break;
        case  1: $zodiac = 'Ox';            break;
        case  2: $zodiac = 'Tiger';     break;
        case  3: $zodiac = 'Rabbit';    break;
        case  4: $zodiac = 'Dragon';    break;
        case  5: $zodiac = 'Snake';     break;
        case  6: $zodiac = 'Horse';     break;
        case  7: $zodiac = 'Goat';  break;
        case  8: $zodiac = 'Monkey';    break;
        case  9: $zodiac = 'Rooster';   break;
        case 10: $zodiac = 'Dog';   break;
        case 11: $zodiac = 'Pig';   break;
    }
    echo "{$year} is the year of the {$zodiac}.<br />";


?>

Ответ 6

Всегда есть вопрос, что быстрее проверить и проверить.

При разработке китайского калькулятора зодиака на calculla мы решили использовать таблицу поиска, поскольку это было просто быстрее и удобнее для кода, чем на самом деле тестирование любого алгоритма для него (даже если алгоритм может быть простым, вам все равно нужно время для его проверки).

Этот поиск не был большой таблицей, и вы действительно можете получить код javascript из источника нашего сайта.