2015-05-15 13 views
7

Ecco il codice. Ho ancora ottenere risultati non correttiQuando si analizza il datetime in un giorno del mese con la lingua inglese, viene ancora analizzato in lingua turca

string srRegisterDate = "25.07.2009 00:00:00" 
CultureInfo culture = new CultureInfo("en-US"); 
srRegisterDate = String.Format("{0:dddd, MMMM d, yyyy}", Convert.ToDateTime(srRegisterDate), culture); 

Il risultato è Cumartesi, Temmuz 25, 2009

Invece dovrebbe essere Saturday, July 25, 2009

come posso risolvere questo errore?

C# .NET v4.5.2

+0

vedi la mia risposta a cura – CheGueVerra

risposta

4

Il problema è a causa della ignorato valore della cultura in String.Format e non con la conversione di stringa in DateTime.

è necessario scaricare:

srRegisterDate = String.Format(culture, "{0:dddd, MMMM d, yyyy}", Convert.ToDateTime(srRegisterDate)); 

Il tuo attuale chiamata alla String.Format utalizes sovraccarico String.Format Method (String, Object[]) e il culture passato nel parametro viene trattato come un semplice parametro di oggetto passato per segnaposto. Dal momento che non esiste un segnaposto, non lo vedi nemmeno essere ignorato.

Se si desidera avere culture utilizzati in String.Format allora è necessario utilizzare l'overload: o String.Format Method (IFormatProvider, String, Object[])

+0

grazie funziona magnificamente – MonsterMMORPG

6

Convert.ToDateTime(srRegisterDate)ancora usa i tuoi CurrentCulture che assomiglia tr-TR basato sui nomi giorno e il mese. Cumartesi - Temmuz

In String.Format, la tua cultura verrà ignorata poiché l'hai usata come terzo parametro come argomento ma non la usi mai.

Il tuo codice chiamato Format(string format, object arg0, object arg1) sovraccarico. Ma non usi mai lo arg1. Questo sovraccarico non pensa che questa sia una cultura. Pensa che sia un altro argomento che si desidera formattare.

Questo String.Format ha un sovraccarico che richiede IFormatProvider come argomento primo.

Ad esempio;

srRegisterDate = String.Format(culture, "{0:dddd, MMMM d, yyyy}", Convert.ToDateTime(srRegisterDate)); 

Ma modo più comman (e ho sempre preferisco) per ottenere il risultato che si desidera sta usando .ToString() metodo come;

srRegisterDate = Convert.ToDateTime(srRegisterDate).ToString("dddd, MMMM d, yyyy", culture); 
+0

No, questo non è il problema, il problema è la conversione di 'DateTime' in stringa. String.Format sta ignorando il parametro cultura. – Habib

+0

@Habib Ingannami. Grazie. Ora sembra la tua soluzione :( –

+0

ma è corretta ora :) – Habib

-1

questo funziona

DateTimeFormatInfo usDtfi = new CultureInfo("en-US", false).DateTimeFormat; 
DateTimeFormatInfo trDtfi = new CultureInfo("tr-TR", false).DateTimeFormat; 
string result = String.Format("{0:dddd, MMMM d, yyyy}", Convert.ToDateTime(srRegisterDate, trDtfi).ToString(usDtfi)); 

originale

25.07.2009 00:00:00

trasformato

2009/07/25 12:00:00

EDIT

era tipo da poco richiesto

string test = String.Format("{0:dddd, MMMM d, yyyy}", Convert.ToDateTime(Convert.ToDateTime(srRegisterDate, trDtfi).ToString(usDtfi))); 

Sabato 25 luglio 2009

+0

Questo non è ciò che OP vuole. –

+0

sì, funzionerà, ma c'è un altro problema ** con questo. Non c'è ** bisogno di 'String.Format' **, il tuo formato verrà ignorato poiché stai ** passando un parametro stringa e non un parametro' DateTime' **. Considera l'esempio 'string result = String.Format (" {0: yyyy-MM-dd} ", Convert.ToDateTime (srRegisterDate, trDtfi) .ToString (usDtfi));' con il tuo codice, – Habib

+0

Sì, ho notato che era felice per risolvere la trasformazione della cultura .. sry OP – CheGueVerra

Problemi correlati