日期格式在不同环境的显示问题

下表显示可用于创建用户定义的日期/时间格式的字符,这些格式字符区分大小写。

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)的差别 ,

文化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)。 它显示了三个随机数,货币值然后创建一个新线程,然后,显示三个随机数为货币值。 但,如该示例输出所示,新线程显示的货币值不反映法语(法国)区域性的格式设置约定不同,从主应用程序线程的输出。

原文地址:https://www.cnblogs.com/hfliyi/p/2671719.html