Da DateTime.ToString
method
Il metodo ToString()
restituisce la rappresentazione di stringa di data e l'ora nel calendario utilizzato dalla cultura corrente. Se il valore della corrente DateTime
istanza è precedente Calendar.MinSupportedDateTime
o dopo Calendar.MaxSupportedDateTime
, il metodo genera un ArgumentOutOfRangeException
.
Il calendario di default della cultura ar-sa
è UmAlQuraCalendar
calender.
var culture = CultureInfo.GetCultureInfo("ar-sa");
Console.WriteLine(culture.Calendar); // prints UmAlQuraCalendar
E da UmAlQuraCalendar.MinSupportedDateTime
Property
La prima data e l'ora supportato dalla classe UmAlQuraCalendar, che è equivalente al primo momento di 30 aprile 1900 C.E. nel calendario gregoriano.
Dal momento che il DateTime
è 1, 1, 1398
, è troppo normale per tiri ArgumentOutOfRangeException
.
È possibile risolvere il problema fornendo un parametro IFormatProvider
nel proprio metodo DateTime.ToString()
che dispone di GregorianCalendar
per impostazione predefinita. Ad esempio, è possibile utilizzare InvariantCulture
.
string strDate = ds.Tables[0].Rows[0]["H_DT"].ToString(CultureInfo.InvariantCulture);
ho scritto configurazione globalizzazione in Web config come ar-sa
essere globale in tutte le applicazioni, ma ho affrontato lo stesso errore, si prega di precisare me, grazie
Un DateTime
appartiene il calendario gregoriano per impostazione predefinita. Da DateTime
structure;
Ogni DateTime
utente utilizza implicitamente il calendario gregoriano per eseguire il suo funzionamento, con l'eccezione dei costruttori che specificano un calendario , e metodi con un parametro derivato da IFormatProvider
, quali System.Globalization.DateTimeFormatInfo
, che implicitamente specifica un calendario.
Ciò significa che il tuo datario ds.Tables[0].Rows[0]["H_DT"]
è il calendario Gregoriano per impostazione predefinita. Ma dato che usi il metodo .ToString()
senza alcun parametro, il tuo metodo usa il tuo CurrentCulture
che è ar-sa
da quando lo hai scritto nel tuo web.config. E quella cultura ha il calendario UmAlQuraCalendar
per impostazione predefinita. Dato che il tuo datetime è fuori portata in questo calendario, il tuo codice genera un'eccezione.
Ricordate, avete un DateTime
con 1318
come un anno di calendario Gregoriano, non1318
come un anno in UmAlQuraCalendar
calendario.
Come esempio;
var date = new DateTime(1318, 1, 1);
Console.WriteLine(date.ToString(new CultureInfo("ar-sa")));
tiri ArgumentOutOfRangeException
eccezione, perché è esattamente lo stesso caso del tuo. Questo è un DateTime che è un anno 1318
in un calendario gregoriano, ma non c'è alcuna rappresentazione sul calendario UmAlQuraCalendar
di questo datetime perché nel calendario UmAlQuraCalendar
, gli anni iniziano con 1900
nel calendario gregoriano.
Dai un'occhiata a come UmAlQuraCalendar
calender implemented;
////////////////////////////////////////////////////////////////////////////
//
// Notes about UmAlQuraCalendar
//
////////////////////////////////////////////////////////////////////////////
/*
** Calendar support range:
** Calendar Minimum Maximum
** ========== ========== ==========
** Gregorian 1900/04/30 2077/11/17
** UmAlQura 1318/01/01 1500/12/30
*/
Qual è il valore di 'ds.Tables [0 ] .Rows [0] ["H_DT"] 'esattamente? Esegui il debug del tuo codice e comunicacelo. –
Soner, ho modificato la mia domanda con screenshot –
nodo data exapnd anche nella vostra schermata girato –