2012-05-01 11 views
10

Sto costruendo un'applicazione che dirà il tuo segno cinese. Mi sono guardato intorno ma ho trovato solo grafici (dal 1900 al 2020), e nessuna logica per creare qualcosa di più dinamico.È possibile calcolare lo zodiaco cinese o devo usare una tabella di ricerca?

Non esiste una logica per determinare uno zodiaco cinese?

+0

So che questa domanda non è forte (è molto debole), ma è un problema logico, e credo che sia adatto al formato Q & A. –

+0

Come stima approssimativa, basta trovare il resto dell'anno diviso per 12. – kennytm

+1

@KennyTM Jan/Feb/Dez hanno problemi seguendo questa logica. –

risposta

5

Ritiene che la risposta alla tua domanda:

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 
+0

Grazie che funziona per me =) –

+0

Come si può trasformare il codice sopra in JavaScript? – iorgu

+0

@iorgu: Certo, basta consultare le origini di riferimento di .NET Framework per ChineseLunisolarCalendar e EastAsianLunisolarCalendar. –

0

Wikipedia ha un riferimento a 2044.

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

Utilizzando Anno del Topo come esempio (per anni dopo il 1984), sembra che i cicli di Rat ogni:

383, 353, 353, 383, 354 days 

Avviso l'ultimo ciclo è 354 che è più che probabile a causa di Leap Year. Forse usando questa formula, puoi allenarti in qualsiasi anno fino a circa 2100 circa.

ho usato il seguente T-SQL di dedurre quei numeri

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') 
2

Se siete seri su come trovare un meccanismo non tabellare per calcolare gli anni dello zodiaco cinese, allora vi consiglio di guardare 'Calendrical Calculations, 3rd Edition' che ha (LISP) codice per gestire i calcoli per il capodanno cinese, e da quello, dedurre l'anno dello < relativo all'animale rilevante > è semplice. Quel libro copre molti sistemi di calendari ed è una lettura interessante. Essendo un calendario luni-solare, il calendario cinese è piuttosto complesso; la matematica diventa abbastanza dettagliata.

Probabilmente è più semplice, e probabilmente più compatto, in termini di codice, per usare una tabella, però.

+0

davvero grazie per il consiglio, darò un'occhiata a questo. –

0

Utilizzare questa funzione per calcolare l'anno.

<?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 />"; 


?> 
3

Utilizzando una calcolatrice

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

perché non è questa la risposta migliore ?, praticamente risolve il problema – Jamisco

0

c'è sempre una domanda che cosa è più veloce da testare e verificare.

Durante lo sviluppo di chinese zodiac calculator su calculla, abbiamo deciso di utilizzare la tabella di ricerca, poiché questo era più veloce e più conveniente per il codice, piuttosto che testare qualsiasi algoritmo (anche se algo può essere semplice, è comunque necessario del tempo per testarlo).

Questa ricerca non era un grande tavolo e si può effettivamente ottenere il codice javascript dalla fonte del nostro sito web.

+0

Grazie per il "codice" e suggerimenti :) Vado a dare un'occhiata al più presto: D –