下表显示可用于创建用户定义的日期/时间格式的字符,这些格式字符区分大小写。
d | 将日显示为不带前导零的数字(如 1 )。如果这是用户定义的数字格式中的唯一字符,请使用 %d。 |
dd | 将日显示为带前导零的数字(如 01 )。 |
ddd | 将日显示为缩写形式(例如 Sun )。 |
dddd | 将日显示为全名(例如 Sunday )。 |
M | 将月份显示为不带前导零的数字(如一月表示为 1 )。如果这是用户定义的数字格式中的唯一字符,请使用 %M。 |
MM | 将月份显示为带前导零的数字(例如 01/12/01 )。 |
MMM | 将月份显示为缩写形式(例如 Jan )。 |
MMMM | 将月份显示为完整月份名(例如 January ) |
gg | 显示时代/纪元字符串(例如 A.D.) |
h | 使用 12 小时制将小时显示为不带前导零的数字(例如 1:15:15 PM )。如果这是用户定义的数字格式中的唯一字符,请使用 %h。 |
hh | 使用 12 小时制将小时显示为带前导零的数字(例如 01:15:15 PM )。 |
H | 使用 24 小时制将小时显示为不带前导零的数字(例如 1:15:15 )。如果这是用户定义的数字格式中的唯一字符,请使用 %H。 |
HH | 使用 24 小时制将小时显示为带前导零的数字(例如 01:15:15 )。 |
m | 将分钟显示为不带前导零的数字(例如 12:1:15 )。如果这是用户定义的数字格式中的唯一字符,请使用 %m。 |
mm | 将分钟显示为带前导零的数字(例如 12:01:15 )。 |
s | 将秒显示为不带前导零的数字(例如 12:15:5 )。如果这是用户定义的数字格式中的唯一字符,请使用 %s。 |
ss | 将秒显示为带前导零的数字(例如 12:15:05 )。 |
F | 显示秒的小数部分。例如,ff 将精确显示到百分之一秒,而 ffff 将精确显示到万分之一秒。用户定义格式中最多可使用七个 f 符号。如果这是用户定义的数字格式中的唯一字符,请使用 %f。 |
T | 使用 12 小时制,并对中午之前的任一小时显示大写的 A ,对中午到 11:59 P.M 之间的任一小时显示大写的 P 。如果这是用户定义的数字格式中的唯一字符,请使用 %t。 |
tt | 使用 12 小时制,并对中午之前任一小时显示大写的 AM ;对中午到 11:59 P.M 之间的任一小时显示大写的 PM 。 |
y | 将年份 (0-9) 显示为不带前导零的数字。如果这是用户定义的数字格式中的唯一字符,请使用 %y。 |
yy | 以带前导零的两位数字格式显示年份(如果适用)。 |
yyy | 以四位数字格式显示年份。 |
yyyy | 以四位数字格式显示年份。 |
z | 显示不带前导零的时区偏移量(如 -8)。如果这是用户定义的数字格式中的唯一字符,请使用 %z。 |
zz | 显示带前导零的时区偏移量(例如 -08) |
zzz | 显示完整的时区偏移量(例如 -08:00) |
实例 :

1 //Console.WriteLine(DateTime.Now.ToString("M/d/yy")); 2 //Console.WriteLine(DateTime.Now.ToString("MM/dd/yyyy")); 3 //Console.WriteLine(DateTime.Now.ToString("d-MMM")); 4 //Console.WriteLine(DateTime.Now.ToString("d-MMMM-y")); 5 //Console.WriteLine(DateTime.Now.ToString("d MMMM")); 6 //Console.WriteLine(DateTime.Now.ToString("MMMM yy")); 7 //Console.WriteLine(DateTime.Now.ToString("hh:mm tt")); 8 //Console.WriteLine(DateTime.Now.ToString("hh:mm:ss t")); 9 //Console.WriteLine(DateTime.Now.ToString("HH:mm:ss")); 10 //Console.WriteLine(DateTime.Now.ToString("M/d/yyyy H:mm"));
显示结果如下图
不同的环境可能显示不同,原因是文化(CultureInfo)的差别 ,
例子:

1 //Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 2 3 //Console.WriteLine(DateTime.Now.ToString("M/d/yy")); 4 //Console.WriteLine(DateTime.Now.ToString("MM/dd/yyyy")); 5 //Console.WriteLine(DateTime.Now.ToString("d-MMM")); 6 //Console.WriteLine(DateTime.Now.ToString("d-MMMM-y")); 7 //Console.WriteLine(DateTime.Now.ToString("d MMMM")); 8 //Console.WriteLine(DateTime.Now.ToString("MMMM yy")); 9 //Console.WriteLine(DateTime.Now.ToString("hh:mm tt")); 10 //Console.WriteLine(DateTime.Now.ToString("hh:mm:ss t")); 11 //Console.WriteLine(DateTime.Now.ToString("HH:mm:ss")); 12 //Console.WriteLine(DateTime.Now.ToString("M/d/yyyy H:mm"));
这段例子,在不同的环境上,显示结果都是一致的。
或者在web.config中加上
<system.web>
<globalization culture="en-US" uiCulture="en-US"></globalization>
</system.web>
延伸
例子:

1 class Program 2 { 3 static Random random = new Random(); 4 static void Main(string[] args) 5 { 6 7 if (Thread.CurrentThread.CurrentCulture.Name != "fr-FR") 8 { 9 Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR"); 10 Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR"); 11 } 12 else 13 { 14 Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 15 Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US"); 16 } 17 Proc(); 18 Thread writer = new Thread(Proc); 19 writer.Name = "New Thread!"; 20 writer.Start(); 21 } 22 static void DisplayThreadInfo() 23 { 24 Console.WriteLine("\n Current Thread Name:'{0}'", Thread.CurrentThread.Name); 25 Console.WriteLine("\n Current Thread Culture/UI Cultrue:{0}/{1}", Thread.CurrentThread.CurrentCulture, Thread.CurrentThread.CurrentUICulture); 26 } 27 static void DisplayData() 28 { 29 Console.WriteLine(" Some Current values:"); 30 for (int i = 0; i < 3; i++) 31 { 32 Console.WriteLine("{0:C2}", random.Next() * 10); 33 } 34 } 35 static void Proc() 36 { 37 DisplayThreadInfo(); 38 DisplayData(); 39 } 40 }
在新应用程序线程启动时,其当前区域性和当前的UI区域性定义的由当前系统区域性并不是由当前线程区域性。 下面的示例演示差异。 它将当前区域性和应用程序线程的当前用户界面区域性设置为法语(法国)区域性(fr FR)。 如果当前区域性已fr FR,该示例将其设置为英语(美国)区域性(en-us)。 它显示了三个随机数,货币值然后创建一个新线程,然后,显示三个随机数为货币值。 但,如该示例输出所示,新线程显示的货币值不反映法语(法国)区域性的格式设置约定不同,从主应用程序线程的输出。