DateTimeFormatInfo 类

14 篇文章 0 订阅

From: http://127.0.0.1:47873/help/0-3684/ms.help?method=page&id=T%3ASYSTEM.GLOBALIZATION.DATETIMEFORMATINFO&product=VS&productVersion=100&topicVersion=100&locale=ZH-CN&topicLocale=ZH-CN


定义如何根据区域性设置 DateTime 值的格式并显示这些值。

命名空间:     System.Globalization
程序集:     mscorlib (在 mscorlib.dll 中)
语法
[SerializableAttribute]
[ComVisibleAttribute(true)]
public sealed class DateTimeFormatInfo : ICloneable, 
    IFormatProvider
备注

此类包含各种信息,例如日期模式、时间模式和 AM/PM 指示项。使用在 DateTimeFormatInfo 对象的属性中存储的标准或自定义模式设置 DateTime 值的格式。

在应用程序中直接使用 DateTimeFormatInfo 构造函数,可创建固定区域性的日期/时间信息。 应用程序对只读版本使用 InvariantInfo 属性,对可写版本使用 DateTimeFormatInfo 构造函数。 对于非特定区域性,不能创建 DateTimeFormatInfo 对象。

若要为特定区域性创建 DateTimeFormatInfo 对象,应用程序应为该区域性创建 CultureInfo 对象并检索 CultureInfo .DateTimeFormat 属性。 以这种方式获得的日期/时间数据仅适用于特定的区域性。

若要为当前线程的区域性创建 DateTimeFormatInfo 对象,应用程序应使用 CurrentInfo 属性。

用户可以通过“控制面板”的“区域和语言选项”部分选择重写某些与 Windows 当前区域性关联的值。例如,用户可能选择以另一种格式显示日期,或选择使用区域性默认设置以外的货币。如果将 CultureInfo .UseUserOverride 属性设置为 true,则还将从用户设置中检索 CultureInfo .DateTimeFormat 对象、 CultureInfo .NumberFormat 对象和 CultureInfo .TextInfo 对象的属性。 如果用户设置与 CultureInfo 对象的关联区域性不兼容(例如,当选定的日历不是 OptionalCalendars 指示的日历之一时),则这些方法的结果和属性值是不确定的。

在 .NET Framework 2.0 版之前的版本中,如果 CultureInfo .UseUserOverride 属性设置为 true,该对象只有在首次被访问时才会读取可被用户重写的每个属性。 由于 DateTimeFormatInfo 具有多个可被用户重写的属性,因此当出现下列情况时,这种“惰性初始化”可导致这类属性之间出现不一致:应用程序访问某个属性,同时用户更改为其他区域性或重写当前用户区域性的属性,随后应用程序访问另一个属性。 例如,按照上述顺序,可以访问LongDatePattern。 然后,用户可以在控制面板中更改模式。在访问时, ShortDatePattern 将遵循新的设置。 当用户选择其他用户区域性而不是只重写某个特定模式时,也会发生类似的不一致。

在 .NET Framework 2.0 版和更高版本中, DateTimeFormatInfo 不使用上述“惰性初始化”。而是在其创建时读取所有的用户可重写属性。 由于对象创建和用户重写过程都不是原子操作,并且相关值在对象创建过程中可能会发生更改,因此漏洞在小范围内仍然存在。但是,这种情况应该十分少见。

这种更改在序列化情况下尤为重要。.NET Framework 2.0 版和更高版本将保留所有可重写的设置,而不是仅保留执行序列化时所访问的可重写设置。

应用程序可通过设置可写 DateTimeFormatInfo 对象的关联属性来将标准模式替换为自定义模式。 若要确定 DateTimeFormatInfo 对象是否可写,应用程序应使用 IsReadOnly 属性。

下表列出了与 DateTimeFormatInfo 属性关联的标准 DateTime 格式模式。 有关更多信息,请参见 标准日期和时间格式字符串

格式模式

关联属性/说明

d

ShortDatePattern

D

LongDatePattern

f

完整日期和时间(长日期和短时间)

F

FullDateTimePattern(长日期和长时间)

g

常规(短日期和短时间)

G

常规(短日期和长时间)

m、M

MonthDayPattern

o、O

往返日期/时间模式;在这种格式模式下,格式设置或分析操作始终使用固定区域性

r、R

RFC1123Pattern;在这种格式模式下,格式设置或分析操作始终使用固定区域性

s

使用本地时间的 SortableDateTimePattern(基于 ISO 8601);在这种格式模式下,格式设置或分析操作始终使用固定区域性

t

ShortTimePattern

T

LongTimePattern

u

使用通用时间显示格式的 UniversalSortableDateTimePattern;在这种格式模式下,格式设置或分析操作始终使用固定区域性

U

使用通用时间的完整日期和时间(长日期和长时间)

y、Y

YearMonthPattern

下表列出了自定义 DateTime 格式模式及其行为。 有关更多信息,请参见 自定义日期和时间格式字符串

格式模式

说明

d、%d

月中的某一天。一位数的日期没有前导零。如果此格式模式没有与其他格式模式组合,应用程序将指定“%d”。

dd

月中的某一天。一位数的天有一个前导零。

ddd

周中某天的缩写名称,在 AbbreviatedDayNames 中定义。

dddd

周中某天的完整名称,在 DayNames 中定义。

f、%f

秒的小数精度为一位。其余数字被截断。如果此格式模式没有与其他格式模式组合,应用程序将指定“%f”。

ff

秒的小数精度为两位。其余数字被截断。

fff

秒的小数精度为三位。其余数字被截断。

ffff

秒的小数精度为四位。其余数字被截断。

fffff

秒的小数精度为五位。其余数字被截断。

ffffff

秒的小数精度为六位。其余数字被截断。

fffffff

秒的小数精度为七位。其余数字被截断。

F、%F

显示秒的小数部分的最高有效数字。如果该数字为零,则不显示任何内容。如果此格式模式没有与其他格式模式组合,应用程序将指定“%F”。

FF

显示秒的小数部分的两个最高有效数字。但是,不显示尾随的零(两个零数字)。

FFF

显示秒的小数部分的三个最高有效数字。但是,不显示尾随的零(三个零数字)。

FFFF

显示秒的小数部分的四个最高有效数字。但是,不显示尾随的零(四个零数字)。

FFFFF

显示秒的小数部分的五个最高有效数字。但是,不显示尾随的零(五个零数字)。

FFFFFF

显示秒的小数部分的六个最高有效数字。但是,不显示尾随的零(六个零数字)。

FFFFFFF

显示秒的小数部分的七个最高有效数字。但是,不显示尾随的零(七个零数字)。

gg

时期或纪元。如果要设置格式的日期不具有关联的时期或纪元字符串,则忽略该模式。

h、%h

12 小时制的小时。一位数的小时数没有前导零。如果此格式模式没有与其他格式模式组合,应用程序将指定“%h”。

hh

12 小时制的小时。一位数的小时有一个前导零。

H、%H

24 小时制的小时。一位数的小时数没有前导零。如果此格式模式没有与其他格式模式组合,应用程序将指定“%H”。

HH

24 小时制的小时。一位数的小时有一个前导零。

K

Kind 属性的不同值,即本地、Utc 或未指定。

m、%m

分钟。一位数的分钟数没有前导零。如果此格式模式没有与其他格式模式组合,应用程序将指定“%m”。

mm

分钟。一位数的分钟有一个前导零。

M、%M

月份数字。一位数的月份没有前导零。如果此格式模式没有与其他格式模式组合,应用程序将指定“%M”。

MM

月份数字。一位数的月份有一个前导零。

MMM

月份的缩写名称,在 AbbreviatedMonthNames 中定义。

MMMM

月份的完整名称,在 MonthNames 中定义。

s、%s

秒。一位数的秒数没有前导零。如果此格式模式没有与其他格式模式组合,应用程序将指定“%s”。

ss

秒。一位数的秒有一个前导零。

t、%t

在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项的第一个字符(如果存在)。 如果此格式模式没有与其他格式模式组合,应用程序将指定“%t”。

tt

在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项(如果存在)。 对于需要维护 AM 与 PM 之间的差异的语言,应用程序应使用此格式模式。以日语为例,其 AM 和 PM 指示符的差异点为第二个字符,而非第一个字符。

y、%y

不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。如果此格式模式没有与其他格式模式组合,应用程序将指定“%y”。

yy

不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。

yyy

三位数的年份。如果年份小于 100,则会以带前导零的方式显示。

yyyy

包括纪元的四位或五位数的年份(取决于所使用的日历)。对于不够四位数的年份,将使用前导零填充。泰国佛历和朝鲜历采用五位数的年份。对于具有五位数的日历,选择“yyyy”模式的用户将看到不带前导零的所有这五位数。例外情况:对于日本历和台湾日历,其行为始终都像是用户选择了“yy”。

yyyyy

五位数的年份。对于不够五位数的年份,将使用前导零填充。例外情况:对于日本历和台湾日历,其行为始终都像是用户选择了“yy”。

yyyyyy

六位数的年份。对于不够六位数的年份,将使用前导零填充。例外情况:对于日本历和台湾日历,其行为始终都像是用户选择了“yy”。此模式可不断续加“y”,从而形成一个更长的字符串,这时将需要使用更多的前导零。

z、%z

时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数没有前导零。例如,太平洋标准时间是“-8”。如果此格式模式没有与其他格式模式组合,应用程序将指定“%z”。

zz

时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时有一个前导零。例如,太平洋标准时间是“-08”。

zzz

完整时区偏移量(“+”或“-”后面跟有小时和分钟)。一位数的小时数和分钟数有前导零。例如,太平洋标准时间是“-08:00”。

:

在 TimeSeparator 中定义的默认时间分隔符。

/

在 DateSeparator 中定义的默认日期分隔符。

c

其中 c 是格式模式(如果单独使用)。 若要使用格式模式“d”、“f”、“F”、“h”、“m”、“s”、“t”、“y”、“z”、“H”、或“M”本身,应用程序应指定“%d”、“%f”、“%F”、“%h”、“%m”、“%s”、“%t”、“%y”、“%z”、“%H”或“%M”。

如果格式模式与原义字符或其他格式模式合并,则可以省略“%”字符。

c

其中 c 是任意字符。 照原义显示字符。若要显示反斜杠字符,应用程序应使用“\\”。

只有上面第二个表中列出的格式模式可用于创建自定义模式。第一个表中列出的标准格式模式只用于创建标准模式。自定义模式的长度至少为两个字符,例如:

  • DateTime.ToString("d") 返回 DateTime 值;“d”是标准短日期模式。

  • DateTime.ToString("%d") 返回月中的某天;“%d”是自定义模式。

  • DateTime.ToString("d ") 返回月中的某天,并在其后面跟有一个空白字符;“d ”是自定义模式。

应用程序只能为固定区域性或特定区域性创建 DateTimeFormatInfo 对象或 NumberFormatInfo 对象,但不能为非特定区域性创建这些对象。 有关固定区域性、特定区域性和非特定区域性的更多信息,请参见 CultureInfo 类。

该类实现 ICloneable 接口以启用 DateTimeFormatInfo 对象的复制。 它还实现 IFormatProvider 以便为应用程序提供格式化信息。

示例

下面的代码示例将输出 en-US 区域性的不同格式模式。它还会显示与这些格式模式关联的属性值。

using System;
using System.Globalization;


public class SamplesDTFI  {

   public static void Main()  {

      // Creates and initializes a DateTimeFormatInfo associated with the en-US culture.
      DateTimeFormatInfo myDTFI = new CultureInfo( "en-US", false ).DateTimeFormat;

      // Creates a DateTime with the Gregorian date January 3, 2002 (year=2002, month=1, day=3).
      // The Gregorian calendar is the default calendar for the en-US culture.
      DateTime myDT = new DateTime( 2002, 1, 3 );

      // Displays the format pattern associated with each format character.
      Console.WriteLine( "FORMAT  en-US EXAMPLE" );
      Console.WriteLine( "CHAR    VALUE OF ASSOCIATED PROPERTY, IF ANY\n" );
      Console.WriteLine( "  d     {0}", myDT.ToString("d", myDTFI) );
      Console.WriteLine( "        {0} {1}\n", myDTFI.ShortDatePattern, "(ShortDatePattern)" );
      Console.WriteLine( "  D     {0}", myDT.ToString("D", myDTFI) );
      Console.WriteLine( "        {0} {1}\n", myDTFI.LongDatePattern, "(LongDatePattern)" );
      Console.WriteLine( "  f     {0}\n", myDT.ToString("f", myDTFI) );
      Console.WriteLine( "  F     {0}", myDT.ToString("F", myDTFI) );
      Console.WriteLine( "        {0} {1}\n", myDTFI.FullDateTimePattern, "(FullDateTimePattern)" );
      Console.WriteLine( "  g     {0}\n", myDT.ToString("g", myDTFI) );
      Console.WriteLine( "  G     {0}\n", myDT.ToString("G", myDTFI) );
      Console.WriteLine( "  m     {0}", myDT.ToString("m", myDTFI) );
      Console.WriteLine( "        {0} {1}\n", myDTFI.MonthDayPattern, "(MonthDayPattern)" );
      Console.WriteLine( "  M     {0}", myDT.ToString("M", myDTFI) );
      Console.WriteLine( "        {0} {1}\n", myDTFI.MonthDayPattern, "(MonthDayPattern)" );
      Console.WriteLine( "  o     {0}\n", myDT.ToString("o", myDTFI) );
      Console.WriteLine( "  r     {0}", myDT.ToString("r", myDTFI) );
      Console.WriteLine( "        {0} {1}\n", myDTFI.RFC1123Pattern, "(RFC1123Pattern)" );
      Console.WriteLine( "  R     {0}", myDT.ToString("R", myDTFI) );
      Console.WriteLine( "        {0} {1}\n", myDTFI.RFC1123Pattern, "(RFC1123Pattern)" );
      Console.WriteLine( "  s     {0}", myDT.ToString("s", myDTFI) );
      Console.WriteLine( "        {0} {1}\n", myDTFI.SortableDateTimePattern, "(SortableDateTimePattern)" );
      Console.WriteLine( "  t     {0}", myDT.ToString("t", myDTFI) );
      Console.WriteLine( "        {0} {1}\n", myDTFI.ShortTimePattern, "(ShortTimePattern)" );
      Console.WriteLine( "  T     {0}", myDT.ToString("T", myDTFI) );
      Console.WriteLine( "        {0} {1}\n", myDTFI.LongTimePattern, "(LongTimePattern)" );
      Console.WriteLine( "  u     {0}", myDT.ToString("u", myDTFI) );
      Console.WriteLine( "        {0} {1}\n", myDTFI.UniversalSortableDateTimePattern, "(UniversalSortableDateTimePattern)" );
      Console.WriteLine( "  U     {0}\n", myDT.ToString("U", myDTFI) );
      Console.WriteLine( "  y     {0}", myDT.ToString("y", myDTFI) );
      Console.WriteLine( "        {0} {1}\n", myDTFI.YearMonthPattern, "(YearMonthPattern)" );
      Console.WriteLine( "  Y     {0}", myDT.ToString("Y", myDTFI) );
      Console.WriteLine( "        {0} {1}\n", myDTFI.YearMonthPattern, "(YearMonthPattern)" );

   }

}

/*
This code produces the following output.

FORMAT  en-US EXAMPLE
CHAR    VALUE OF ASSOCIATED PROPERTY, IF ANY

  d     1/3/2002
        M/d/yyyy (ShortDatePattern)

  D     Thursday, January 03, 2002
        dddd, MMMM dd, yyyy (LongDatePattern)

  f     Thursday, January 03, 2002 12:00 AM

  F     Thursday, January 03, 2002 12:00:00 AM
        dddd, MMMM dd, yyyy h:mm:ss tt (FullDateTimePattern)

  g     1/3/2002 12:00 AM

  G     1/3/2002 12:00:00 AM

  m     January 03
        MMMM dd (MonthDayPattern)

  M     January 03
        MMMM dd (MonthDayPattern)

  o     2002-01-03T00:00:00.0000000

  r     Thu, 03 Jan 2002 00:00:00 GMT
        ddd, dd MMM yyyy HH':'mm':'ss 'GMT' (RFC1123Pattern)

  R     Thu, 03 Jan 2002 00:00:00 GMT
        ddd, dd MMM yyyy HH':'mm':'ss 'GMT' (RFC1123Pattern)

  s     2002-01-03T00:00:00
        yyyy'-'MM'-'dd'T'HH':'mm':'ss (SortableDateTimePattern)

  t     12:00 AM
        h:mm tt (ShortTimePattern)

  T     12:00:00 AM
        h:mm:ss tt (LongTimePattern)

  u     2002-01-03 00:00:00Z
        yyyy'-'MM'-'dd HH':'mm':'ss'Z' (UniversalSortableDateTimePattern)

  U     Thursday, January 03, 2002 8:00:00 AM

  y     January, 2002
        MMMM, yyyy (YearMonthPattern)

  Y     January, 2002
        MMMM, yyyy (YearMonthPattern)

*/

继承层次结构
System .Object 
    System.Globalization .DateTimeFormatInfo 
线程安全
此类型的任何公共  static (在 Visual Basic 中为  Shared ) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。
平台

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Xbox 360, Zune

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见 .NET Framework 系统要求
版本信息
.NET Framework
受以下版本支持:4、3.5、3.0、2.0、1.1、1.0 
.NET Framework Client Profile
受以下版本支持:4 
XNA Framework
受以下版本支持:3.0、2.0、1.0 
请参见
参考
其他资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值