如果不添加DateTimeFormatInfo.InvariantInfo
参数的话,默认是本地化的。
Console.WriteLine(DateTime.Now.ToString("hh:mm tt", System.Globalization.DateTimeFormatInfo.InvariantInfo)); //12:09 PM
Console.WriteLine(DateTime.Now.ToString("hh:mm tt")); //12:09 下午
Console.WriteLine(DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss tt", System.Globalization.DateTimeFormatInfo.InvariantInfo)); //03/25/2020 12:13:24 PM
DateTime time = DateTime.Now;
string s = time.ToString("yyyy.MM.dd hh:mm:ss t\M");
Console.WriteLine(s);
Explanation: t gives the first character of the AM/PM designator (the localized designator can be retrieved in DateTimeFormatInfo.AMDesignator and DateTimeFormatInfo.PMDesignator). The M escapes the M so that DateTime.ToString does not interpret it as part of the format string and print the numerical value of the month.
Note that once you do this you are explicitly being culture insensitive. For example, in Japan, the AM/PM designator differs in the second characters, not the first.