La globalizzazione di CultureInfo & DateTimeFormatInfo: Come possiamo cambiare le cifre formato per il mio linguaggio?

Io uso System.Globalization come di seguito:

CultureInfo calture = new CultureInfo(MyCultureInfoGoesHere);
DateTimeFormatInfo info = calture.DateTimeFormat;
info.AbbreviatedDayNames = new string[] { "bla", "bla", "bla", "bla", "bla", "bla", "bla" };
info.ShortestDayNames = new string[] { "bla", "bla", "bla", "bla", "bla", "bla", "bla" };
info.DayNames = new string[] { "bla", "bla", "bla", "bla", "bla", "bla", "bla" };
info.AbbreviatedMonthNames = new string[] { "bla", "bla", "bla", "bla", "bla", "bla", "bla", "bla", "bla", "bla", "bla", "bla", "" };
info.MonthNames = new string[] { "bla", "bla", "bla", "bla", "bla", "bla", "bla", "bla", "bla", "bla", "bla", "bla", "" };
info.AMDesignator = "bla";
info.PMDesignator = "bla";
info.ShortDatePattern = "yyyy/MM/dd";
//info.ShortDatePattern = "dd/MM/yyyy";
info.LongDatePattern = "dddd , dd MMMM yyyy";
info.FirstDayOfWeek = DayOfWeek.bla;
MyCalendar cal = new MyCalendar();
typeof(DateTimeFormatInfo).GetField("calendar", BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic).SetValue(info, cal);
//object obj = typeof(DateTimeFormatInfo).GetField("m_cultureTableRecord", BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic).GetValue(info);
//obj.GetType().GetMethod("UseCurrentCalendar", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(obj, new object[] { cal.GetType().GetProperty("ID", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(cal, null) });
typeof(System.Globalization.CultureInfo).GetField("calendar", BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic).SetValue(calture, cal);
Thread.CurrentThread.CurrentCulture = calture;
Thread.CurrentThread.CurrentUICulture = calture;
CultureInfo.CurrentCulture.DateTimeFormat = info;
CultureInfo.CurrentUICulture.DateTimeFormat = info;

Le mie domande sono:

  1. Perché le righe di commento sono errori in VS2010 (.NET 4.0), ma sono ok in VS2008.NET 3.5)?

  2. Come posso localizzare il mio numero quando uso DateTime.Now, voglio dire, voglio cifre formato nella mia lingua(Solo Per DateTime)! è possibile?

Grazie in anticipo e cordiali saluti.

  • Non ho capito bene, che si desidera utilizzare i cosiddetti Orientale, numeri arabi al posto del tipico 0-9?
  • sì / hai ragione / ma solo nel mio DateTime E componente Calendario / no altro dove / è possibile?
  • Quando si dice “errori”, forse sarebbe una buona idea postare gli errori effettivi sei sempre così?
InformationsquelleAutor SilverLight | 2011-04-10



3 Replies
  1. 3

    Si prega di dare un’occhiata a questo risposta. Anche che uno potrebbe essere di aiuto. L’idea di base è creare un metodo di estensione che andrà a sostituire i numeri con le sue Orientale arabo controparti. BTW. Sembra che entrambi i numeri e qualche mese /i nomi dei giorni sono già definiti per il ps-AF cultura:

            //gets Eastern Arabic digits array
            string[] numerals = CultureInfo.CreateSpecificCulture("ps-AF").NumberFormat.NativeDigits;

    Io non so se è appropriato per voi.

  2. 3
    1. Si utilizza la riflessione, che è utilizzare i dettagli di implementazione. Questi dettagli possono benissimo aver cambiato tra .NET 3.5 e .Rete 4. Non che. Se l’API di designer ha voluto che scherza con queste cose, l’avrebbero fatto loro pubblico. In qualsiasi momento si contano i dettagli di implementazione, come questo, si dovrebbe aspettare il potenziale di rottura quando si modifica l’attuazione.

    2. Hai provato a clonare l’intero CultureInfo, e modificando il NumberFormatInfo così come il DateTimeFormatInfo? Non posso dire che ho sempre fatto anche io, ma vale la pena provare.

    • grazie per la risposta!!! vuoi plz corretto per me superiore codici (media righe di commento) per .rete 4…
    • No, mi dispiace, non ho tempo per indagare ulteriormente.
  3. 1

    perché le righe di commento sono di errore in VS2010 (.NET 4.0), ma sono ok in VS2008.NET 3.5)?

    Le cose cambiano. Roba succede. La vita va avanti. ~ Elizabeth Scott

    Come posso localizzazione mio numero quando uso DateTime.Ora, voglio dire, voglio cifre formato nella mia lingua(Solo Per DateTime)! è possibile?
    Anche se il C# contiene già bella quantità di valori di default, è possibile ottimizzare il vostro gradimento.

    Qui è un esempio su come impostare datetime info.

    Ora se vuoi stampare DateTime.Now

    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", false);
    Console.WriteLine(DateTime.Now.ToString("D", CultureInfo.CurrentCulture));
    Thread.CurrentThread.CurrentCulture = new CultureInfo("et")
    {
        DateTimeFormat = { LongDatePattern = "d. MMMM yyyy'. a.'" }
    }; 
    Console.WriteLine(DateTime.Now.ToString("D", CultureInfo.CurrentCulture));

    Si otterrebbe:

    Sunday, April 10, 2011
    10. aprill 2011. a.

    Presumo, questo è quello che si voleva ottenere diversi formato orario, basta cambiare la cultura.

    • Forse DateTime.Today se non è necessario che la parte
    • E se si desidera solo numeri, per esempio "10.4.2011" quindi utilizzare diversi schemi come: LongDatePattern = "d.M.yyyy".

Lascia un commento