2010-02-03 2 views
9

Sono in Etiopia e abbiamo 13 mesi. 12 di loro con 30 giorni ciascuno e 13 mesi con 5 o 6 giorni. Voglio ordinare i dati per data utilizzando il metodo di ordinamento BindingSource. Ma per farlo, ho bisogno di impostare il mio campo data un tipo di dati di data. Quando ho impostato il DataType alla data, non posso inserire alcuni valori come 13 per il valore del mese e 30 per il valore del giorno del secondo mese.È possibile impostare un tipo di dati data come 13 come mese e 30 per tutti i mesi?

Quello che voglio è solo per rendere la mia domanda accetta 13 come un mese e 30 come un giorno per tutti i mesi, in modo che io possa ordinare i miei dati per data. È possibile farlo impostando la cultura per la mia applicazione o con altri mezzi?

+0

quale linguaggio/struttura stai usando? (ad esempio VB.Net, Java ecc.) –

+0

sto usando vb.net –

+0

Cosa, esattamente, ti impedisce di inserire un 13? È il database o qualche altro codice? – NotMe

risposta

3

In teoria, è possibile caricare il CultureInfo corrispondente alla lingua/paese per l'Etiopia. Sembra che la lingua nativa in Ethiopia sia Amharic che abbia il codice breve ISO 639 di "am" e che il codice ISO 3166 per l'Etiopia sia "ET". Pertanto, sembra che il corretto culture code per l'Etiopia sia "am-ET". Quindi, prova quanto segue.

CultureInfo ethiopia = new CultureInfo("am-ET"); 
int year = 2002; // it is currently 2002 in Ethiopia 
int months = ethiopia.Calendar.GetMonthsInYear(year); 
for (int i = 1; i <= months; i++) { 
    Console.WriteLine(ethiopia.Calendar.GetDaysInMonth(year, i)); 
} 

E poi, as it is the 13th month that has five or days

DateTime time = new DateTime(2002, 13, 5, ethiopia.Calendar); 

sarebbe legale.

Se per qualche motivo non funziona, si può anche vedere come creare un calendario personalizzato usando questo CodeProject on the Vietnamese Lunar Calendar come esempio.

+1

Il sistema di numerazione etiopico è affascinante in quanto non ha uno zero: http://blogs.msdn.com/michkap/ archivio/2005/02/01/364376.aspx – jason

+0

Come posso fare questo per modificare il datatable? Voglio dire, è il datatable che non accetta i dati provenienti dal database. –

+0

Provate ad impostare la proprietà 'DataTable.Locale' su un'istanza di' CultureInfo' che rappresenta la cultura "am-ET". Non so che funzionerà, ma è la prima cosa da provare. Il problema è che il 'DataTable' userà ancora' InvariantCulture' per la stragrande maggioranza delle sue funzionalità. – jason

0

Ho usato questo come soluzione.

è possibile aggiungere una colonna separata nel datatable per tenere conto dei giorni extra epagionali ... quindi ordinare i dati per entrambe le colonne. per esempio: qui sarebbe una tabella di esempio ordinati in senso decrescente, prima di Colonna1 poi Column2:

RegDate ---------------- EpaDate

12/30/09- -------------- 1/5/2010 30/12/09 ---------------- 1/4/2010 12/30/09 ---------------- 1/3/2010 30/12/09 ---------------- 1/2/2010 30/12/09 ---------------- 1/1/2010 30/12/09 ----------------- -NULL 29/12/09 ------------------ NULL 28/12/09 ----------------- -NULL