Come posso formattare il 07/03/2012 al 7 marzo 2012 in C #

Qualcuno per favore aiuto ho bisogno di mostrare la data 03/03/2012 come 3 marzo 2012 ecc

Puoi creare il tuo fornitore di formato personalizzato per farlo:

public class MyCustomDateProvider: IFormatProvider, ICustomFormatter { public object GetFormat(Type formatType) { if (formatType == typeof(ICustomFormatter)) return this; return null; } public string Format(string format, object arg, IFormatProvider formatProvider) { if (!(arg is DateTime)) throw new NotSupportedException(); var dt = (DateTime) arg; string suffix; if (new[] {11, 12, 13}.Contains(dt.Day)) { suffix = "th"; } else if (dt.Day % 10 == 1) { suffix = "st"; } else if (dt.Day % 10 == 2) { suffix = "nd"; } else if (dt.Day % 10 == 3) { suffix = "rd"; } else { suffix = "th"; } return string.Format("{0:MMMM} {1}{2}, {0:yyyy}", arg, dt.Day, suffix); } } 

Questo può quindi essere chiamato così:

 var formattedDate = string.Format(new MyCustomDateProvider(), "{0}", date); 

Risultante in (per esempio):

3 marzo 2012

Humanizer soddisfa tutte le esigenze di .NET per la manipolazione e la visualizzazione di stringhe, enumerazioni, date, tempi, tempi, numeri e quantità

Per installare Humanizer, eseguire il comando seguente nella Console di Gestione pacchetti

 PM> Install-Package Humanizer 

Ordinalize trasforma un numero in una stringa ordinale utilizzata per indicare la posizione in una sequenza ordinata come 1st, 2nd, 3rd, 4th:

 1.Ordinalize() => "1st" 5.Ordinalize() => "5th" 

Quindi puoi usare:

 String.Format("{0} {1:MMMM yyyy}", date.Day.Ordinalize(), date) 

Stringhe di formato di data e ora personalizzate

 date.ToString("MMMM d, yyyy") 

O se ti serve anche il “rd”:

 string.Format("{0} {1}, {2}", date.ToString("MMMM"), date.Day.Ordinal(), date.ToString("yyyy")) 
  • il metodo Ordinal() può essere trovato qui

No, non c’è nulla in stringa. Formatta () che ti darà numeri ordinali (1 °, 2 °, 3 °, 4 ° e così via).

Puoi combinare il formato della data come suggerito in altre risposte, con il tuo ordinale come suggerito per esempio in questa risposta

C’è un modo semplice per creare ordinali in C #?

 string Format(DateTime date) { int dayNo = date.Day; return string.Format("{0} {1}{2}, {3}", date.ToString("MMMM"), dayNo, AddOrdinal(dayNo), date.Year); } 
 public static class IntegerExtensions { ///  /// converts an integer to its ordinal representation ///  public static String AsOrdinal(this Int32 number) { if (number < 0) throw new ArgumentOutOfRangeException("number"); var work = number.ToString("n0"); var modOf100 = number % 100; if (modOf100 == 11 || modOf100 == 12 || modOf100 == 13) return work + "th"; switch (number % 10) { case 1: work += "st"; break; case 2: work += "nd"; break; case 3: work += "rd"; break; default: work += "th"; break; } return work; } } 

Prova:

 [TestFixture] class IntegerExtensionTests { [Test] public void TestCases_1s_10s_100s_1000s() { Assert.AreEqual("1st", 1.AsOrdinal()); Assert.AreEqual("2nd", 2.AsOrdinal()); Assert.AreEqual("3rd", 3.AsOrdinal()); foreach (var integer in Enumerable.Range(4, 6)) Assert.AreEqual(String.Format("{0:n0}th", integer), integer.AsOrdinal()); Assert.AreEqual("11th", 11.AsOrdinal()); Assert.AreEqual("12th", 12.AsOrdinal()); Assert.AreEqual("13th", 13.AsOrdinal()); foreach (var integer in Enumerable.Range(14, 6)) Assert.AreEqual(String.Format("{0:n0}th", integer), integer.AsOrdinal()); Assert.AreEqual("21st", 21.AsOrdinal()); Assert.AreEqual("22nd", 22.AsOrdinal()); Assert.AreEqual("23rd", 23.AsOrdinal()); foreach (var integer in Enumerable.Range(24, 6)) Assert.AreEqual(String.Format("{0:n0}th", integer), integer.AsOrdinal()); Assert.AreEqual("31st", 31.AsOrdinal()); Assert.AreEqual("32nd", 32.AsOrdinal()); Assert.AreEqual("33rd", 33.AsOrdinal()); //then just jump to 100 Assert.AreEqual("101st", 101.AsOrdinal()); Assert.AreEqual("102nd", 102.AsOrdinal()); Assert.AreEqual("103rd", 103.AsOrdinal()); foreach (var integer in Enumerable.Range(104, 6)) Assert.AreEqual(String.Format("{0:n0}th", integer), integer.AsOrdinal()); Assert.AreEqual("111th", 111.AsOrdinal()); Assert.AreEqual("112th", 112.AsOrdinal()); Assert.AreEqual("113th", 113.AsOrdinal()); foreach (var integer in Enumerable.Range(114, 6)) Assert.AreEqual(String.Format("{0:n0}th", integer), integer.AsOrdinal()); Assert.AreEqual("121st", 121.AsOrdinal()); Assert.AreEqual("122nd", 122.AsOrdinal()); Assert.AreEqual("123rd", 123.AsOrdinal()); foreach (var integer in Enumerable.Range(124, 6)) Assert.AreEqual(String.Format("{0:n0}th", integer), integer.AsOrdinal()); //then just jump to 1000 Assert.AreEqual("1,001st", 1001.AsOrdinal()); Assert.AreEqual("1,002nd", 1002.AsOrdinal()); Assert.AreEqual("1,003rd", 1003.AsOrdinal()); foreach (var integer in Enumerable.Range(1004, 6)) Assert.AreEqual(String.Format("{0:n0}th", integer), integer.AsOrdinal()); Assert.AreEqual("1,011th", 1011.AsOrdinal()); Assert.AreEqual("1,012th", 1012.AsOrdinal()); Assert.AreEqual("1,013th", 1013.AsOrdinal()); foreach (var integer in Enumerable.Range(1014, 6)) Assert.AreEqual(String.Format("{0:n0}th", integer), integer.AsOrdinal()); Assert.AreEqual("1,021st", 1021.AsOrdinal()); Assert.AreEqual("1,022nd", 1022.AsOrdinal()); Assert.AreEqual("1,023rd", 1023.AsOrdinal()); foreach (var integer in Enumerable.Range(1024, 6)) Assert.AreEqual(String.Format("{0:n0}th", integer), integer.AsOrdinal()); } } 

Basato sulla risposta di Rob Levine e sui commenti su quella risposta … mi sono adattato come metodo di estensione su DateTime in modo che tu possa semplicemente chiamare:

 var formattedDate = date.Friendly(); 

Ecco il metodo di estensione:

 public static class DateFormatter { public static string Friendly(this DateTime dt) { string suffix; switch (dt.Day) { case 1: case 21: case 31: suffix = "st"; break; case 2: case 22: suffix = "nd"; break; case 3: case 23: suffix = "rd"; break; default: suffix = "th"; break; } return string.Format("{0:MMMM} {1}{2}, {0:yyyy}", dt, dt.Day, suffix); } } 

Ecco un’altra versione dell’estensione Ordinalize (), breve e dolce:

 public static string Ordinalize(this int x) { return x.ToString() + ((x % 10 == 1 && x != 11) ? "st" : (x % 10 == 2 && x != 12) ? "nd" : (x % 10 == 3 && x != 13) ? "rd" : "th"); } 

e quindi chiama quell’estensione come questa

 myDate.Day.Ordinalize() 

o

 myAnyNumber.Ordinalize() 
 DateTime dt = new DateTime(args); String.Format("{0:ddd, MMM d, yyyy}", dt); 

// “dom, mar 9, 2008”

Usa il seguente codice:

 DateTime thisDate1 = new DateTime(2011, 6, 10); Console.WriteLine("Today is " + thisDate1.ToString("MMMM dd, yyyy") + "."); DateTimeOffset thisDate2 = new DateTimeOffset(2011, 6, 10, 15, 24, 16, TimeSpan.Zero); Console.WriteLine("The current date and time: {0:MM/dd/yy H:mm:ss zzz}", thisDate2); // The example displays the following output: // Today is June 10, 2011. // The current date and time: 06/10/11 15:24:16 +00:00