简体   繁体   中英

DateTime standard format for day, month and year

Is there any standard DateTime format for showing "[day] [month] [year]"? I do not wish to use custom format strings, because it takes away the ability to have order of "day" and "month" depending on the country. For example, for "en-us" it's "November 22", in France day is first, so it's "22 Novembre"

Just to display day and month like this, I know I can use "M" standard format string.

But how I can write "November 22, 2018" ?

Do I need to concatenate two strings like this:

$"{dt.ToString("M")}, {dt.ToString("yyyy")}"

Is there another way?

It does seem a little odd that the full option isn't available. The closest I can suggest is to use custom formatting, but rather than supply your own, grab DateTimeFormatInfo.LongDatePattern and strip out any occurrence of "dddd" (and its surrounding space/punctuation).

That should give you the variation you want across cultures while removing the weekday.


Examples:

  en-US => dddd, MMMM dd, yyyy => MMMM dd, yyyy => November 22, 2018

  fr-FR => dddd d MMMM yyyy    => d MMMM yyyy   => 22 novembre 2018

As I can understand the solution for your problem could be to create a new CultureInfo object.

I've tested it.

CultureInfo us = new CultureInfo("en-US");
string usDate = us.DateTimeFormat.ShortDatePattern;

CultureInfo fr = new CultureInfo("fr-FR");
string frDate = fr.DateTimeFormat.ShortDatePattern;

Console.WriteLine(usDate);
Console.WriteLine(frDate);

//Apply the country format here.
var localDate = DateTime.Now.ToString(frDate); 

Console.WriteLine(localDate);

So the format output will be as the location format you provide.

M/d/yyyy ---> USA format.
dd/MM/yyyy ---> France format.

22/11/2018 ---> France format applied to the current date.

For more information redirect to: CultureInfo Class

$"{dt.ToString("MMMM dd, yyyy")}"

This will show it as November 22, 2018 assuming that dt is assigned this date. Also, check out Custom Date Time Format String .

You can obtain the LongDatePattern from the current culture, then remove the day-of-week ( dddd ) and surrounding characters with a regular expression. Below, I am assuming that commas, periods, and spaces are the only separators, but if you encounter others you may want to modify the regex accordingly.

string longDatePattern = CultureInfo.CurrentCulture.DateTimeFormat.LongDatePattern;
string modifiedDatePattern = Regex.Replace(longDatePattern, @"[,.]?\s?d{4}[,.]?\s?", "");

Console.WriteLine(longDatePattern);      //  "dddd, MMMM d, yyyy"
Console.WriteLine(modifiedDatePattern);  //  "MMMM d, yyyy"

Now you have a custom format you can apply:

string s = DateTime.Now.ToString(modifiedDatePattern);

Console.WriteLine(s);  // "November 22, 2018"

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM