C#日期格式参考小结


我们经常会遇到对时间进行转换,达到不同的显示效果,默认格式为:2006-6-6 14:33:34

如果要换成成200606,06-2006,2006-6-6或更多的格式该怎么办呢?

这里将要用到:DateTime.ToString的方法(String, IFormatProvider)

示例:

using System;

using System.Globalization;

String format="D";

DateTime date=DataTime.Now;

Response.Write(date.ToString(format, DateTimeFormatInfo.InvariantInfo));

结果输出

Thursday, June 16, 2006

在这里列出了参数format格式详细用法

=======================

格式字符 关联属性/说明

d ShortDatePattern

D LongDatePattern

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

F FullDateTimePattern(长日期和长时间)

g 常规(短日期和短时间)

G 常规(短日期和长时间)

m、M MonthDayPattern

r、R RFC1123Pattern

s 使用当地时间的 SortableDateTimePattern(基于 ISO 8601)

t ShortTimePattern

T LongTimePattern

u UniversalSortableDateTimePattern 用于显示通用时间的格式

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

y、Y YearMonthPattern

下表列出了可被合并以构造自定义模式的模式

========================================

这些模式是区分大小写的;例如,识别“MM”,但不识别“mm”。如果自定义模式包含空白字符或用单引号括起来的字符,则输出字符串页也将包含这些字符。未定义为格式模式的一部分或未定义为格式字符的字符按其原义复制。

格式模式 说明 :

d 月中的某一天。一位数的日期没有前导零。

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

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

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

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


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


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

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

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

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

yyyy 包括纪元的四位数的年份。

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

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

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

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


HH 24 小时制的小时

。一位数的小时数有前导零。

m 分钟。一位数的分钟数没有前导零。


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


s 秒。一位数的秒数没有前导零。

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

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

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

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

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

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

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

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

t 在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项的第一个字符(如果存在)。

tt 在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项(如果存在)。

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

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

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

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

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

% c 其中 c 是格式模式(如果单独使用)。如果格式模式与原义字符或其他格式模式合并,则可以省略“%”字符。

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

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

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

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

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

比较方便的是,上面的参数可以随意组合,并且不会出错,多试试,肯定会找到你要的时间格式

如要得到2005年06月 这样格式的时间

可以这样写:

date.ToString("yyyy年MM月", DateTimeFormatInfo.InvariantInfo)

或者

date.ToString("yyyy年MM月")

如此类推.

下面列出一些Asp.net中具体的日期格式化用法:

============================================


1.绑定时格式化日期方法:


<ASP:BOUNDCOLUMN DATAFIELD= "JoinTime " DATAFORMATSTRING= "{0:yyyy-MM-dd} " >

<ITEMSTYLE WIDTH= "18% " > </ITEMSTYLE >

</ASP:BOUNDCOLUMN >


2.数据控件如DataGrid/DataList等的件格式化日期方法:


e.Item.Cell[0].Text = Convert.ToDateTime(e.Item.Cell[0].Text).ToShortDateString();


3.用String类转换日期显示格式:


String.Format( "yyyy-MM-dd ",yourDateTime);


4.用Convert方法转换日期显示格式:


Convert.ToDateTime("2005-8-23").ToString

("yyMMdd",System.Globalization.DateTimeFormatInfo.InvariantInfo); //支持繁体数据库


5.直接用ToString方法转换日期显示格式:


DateTime.Now.ToString("yyyyMMddhhmmss");

DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss")


6.只显示年月


DataBinder.Eval(Container.DataItem,"starttime","{0:yyyy-M}")


7.显示时间所有部分,包括:年月日时分秒


<asp:BoundColumn DataField="收款时间" HeaderText="收款时间"

DataFormatString="{0:yyyy-MM-dd HH24:mm:ss}">

</asp:BoundColumn>

=========================================================================





自定义 DateTime 格式字符串(MSDN)

自定义 DateTime 格式字符串

自定义

DateTime

格式字符串由一个或多个自定义

DateTime

格式说明符组成,该格式字符串定义了由格式化操作产生的


DateTime


对象的文本表示形式。请注意,任何非


标准 DateTime 格式字符串


的字符串都被解释为自定义

DateTime

格式字符串。

自定义 DateTime 格式说明符

下表描述了自定义

DateTime

格式说明符。有关各格式说明符所产生输出的示例,请参见


自定义 DateTime 格式字符串输出示例




格式说明符 说明

d

将月中日期表示为从 1 至 31 的数字。一位数字的日期设置为不带前导零的格式。有关使用单个格式说明符的更多信息,请参见


使用单个自定义格式说明符


dd

将月中日期表示为从 01 至 31 的数字。一位数字的日期设置为带前导零的格式。

ddd

将一周中某天的缩写名称表示为当前


System.Globalization.DateTimeFormatInfo.AbbreviatedDayNames


属性中定义的名称。

dddd(另加任意数量的“d”说明符)

将一周中某天的全名表示为当前


System.Globalization.DateTimeFormatInfo.DayNames


属性中定义的名称。

f

表示秒部分的最高有效位。

请注意,如果“f”格式说明符单独使用,没有其他格式说明符,则该说明符被看作是“f”标准

DateTime

格式说明符(完整日期/时间模式)。有关使用单个格式说明符的更多信息,请参见


使用单个自定义格式说明符


将此格式说明符与


ParseExact





TryParseExact


方法一起使用时,所用“f”格式说明符的数目指示要分析的秒部分的最高有效位位数。

ff

表示秒部分的两个最高有效位。

fff

表示秒部分的三个最高有效位。

ffff

表示秒部分的四个最高有效位。

fffff

表示秒部分的五个最高有效位。

ffffff

表示秒部分的六个最高有效位。

fffffff

表示秒部分的七个最高有效位。

F

表示秒部分的最高有效位。如果该位为零,则不显示任何信息。有关使用单个格式说明符的更多信息,请参见


使用单个自定义格式说明符


将此格式说明符与

ParseExact



TryParseExact

方法一起使用时,所用“F”格式说明符的数目指示要分析的秒部分的最高有效位最大位数。

FF

表示秒部分的两个最高有效位。但不显示尾随零(或两个零位)。

FFF

表示秒部分的三个最高有效位。但不显示尾随零(或三个零位)。

FFFF

表示秒部分的四个最高有效位。但不显示尾随零(或四个零位)。

FFFFF

表示秒部分的五个最高有效位。但不显示尾随零(或五个零位)。

FFFFFF

表示秒部分的六个最高有效位。但不显示尾随零(或六个零位)。

FFFFFFF

表示秒部分的七个最高有效位。但不显示尾随零(或七个零位)。

g 或 gg(另加任意数量的“g”说明符)

表示时期或纪元(例如 A.D.)。如果要设置格式的日期不具有关联的时期或纪元字符串,则忽略该说明符。有关使用单个格式说明符的更多信息,请参见


使用单个自定义格式说明符


h

将小时表示为从 1 至 12 的数字,即通过 12 小时制表示小时,自午夜或中午开始对整小时计数。因此,午夜后经过的某特定小时数与中午过后的相同小时数无法加以区分。小时数不进行舍入,一位数字的小时数设置为不带前导零的格式。例如,给定时间为 5:43,则此格式说明符显示“5”。有关使用单个格式说明符的更多信息,请参见


使用单个自定义格式说明符


hh, hh(另加任意数量的“h”说明符)

将小时表示为从 01 至 12 的数字,即通过 12 小时制表示小时,自午夜或中午开始对整小时计数。因此,午夜后经过的某特定小时数与中午过后的相同小时数无法加以区分。小时数不进行舍入,一位数字的小时数设置为带前导零的格式。例如,给定时间为 5:43,则此格式说明符显示“05”。

H

将小时表示为从 0 至 23 的数字,即通过从零开始的 24 小时制表示小时,自午夜开始对小时计数。一位数字的小时数设置为不带前导零的格式。

HH, HH(另加任意数量的“H”说明符)

将小时表示为从 00 至 23 的数字,即通过从零开始的 24 小时制表示小时,自午夜开始对小时计数。一位数字的小时数设置为带前导零的格式。

K

表示

DateTime.Kind

属性的不同值,即“Local”、“Utc”或“Unspecified”。此说明符以文本形式循环设置 Kind 值并保留时区。如果 Kind 值为“Local”,则此说明符等效于“zzz”说明符,用于显示本地时间偏移量,例如“-07:00”。对于“Utc”类型值,该说明符显示字符“Z”以表示 UTC 日期。对于“Unspecified”类型值,该说明符等效于“”(无任何内容)。

m

将分钟表示为从 0 至 59 的数字。分钟表示自前一小时后经过的整分钟数。一位数字的分钟数设置为不带前导零的格式。有关使用单个格式说明符的更多信息,请参见


使用单个自定义格式说明符


mm, mm(另加任意数量的“m”说明符)

将分钟表示为从 00 至 59 的数字。分钟表示自前一小时后经过的整分钟数。一位数字的分钟数设置为带前导零的格式。

M

将月份表示为从 1 至 12 的数字。一位数字的月份设置为不带前导零的格式。有关使用单个格式说明符的更多信息,请参见


使用单个自定义格式说明符


MM

将月份表示为从 01 至 12 的数字。一位数字的月份设置为带前导零的格式。

MMM

将月份的缩写名称表示为当前


System.Globalization.DateTimeFormatInfo.AbbreviatedMonthNames


属性中定义的名称。

MMMM

将月份的全名表示为当前


System.Globalization.DateTimeFormatInfo.MonthNames


属性中定义的名称。

s

将秒表示为从 0 至 59 的数字。秒表示自前一分钟后经过的整秒数。一位数字的秒数设置为不带前导零的格式。有关使用单个格式说明符的更多信息,请参见


使用单个自定义格式说明符


ss, ss(另加任意数量的“s”说明符)

将秒表示为从 00 至 59 的数字。秒表示自前一分钟后经过的整秒数。一位数字的秒数设置为带前导零的格式。

t

表示当前


System.Globalization.DateTimeFormatInfo.AMDesignator





System.Globalization.DateTimeFormatInfo.PMDesignator


属性中定义的 A.M./P.M. 指示符的第一个字符。如果正在格式化的时间中的小时数小于 12,则使用 A.M. 指示符;否则使用 P.M. 指示符。有关使用单个格式说明符的更多信息,请参见


使用单个自定义格式说明符


tt, tt(另加任意数量的“t”说明符)

将 A.M./P.M. 指示符表示为当前

System.Globalization.DateTimeFormatInfo.AMDesignator



System.Globalization.DateTimeFormatInfo.PMDesignator

属性中定义的内容。如果正在格式化的时间中的小时数小于 12,则使用 A.M. 指示符;否则使用 P.M. 指示符。

y

将年份表示为最多两位数字。如果年份多于两位数,则结果中仅显示两位低位数。如果年份少于两位数,则该数字设置为不带前导零的格式。有关使用单个格式说明符的更多信息,请参见


使用单个自定义格式说明符


yy

将年份表示为两位数字。如果年份多于两位数,则结果中仅显示两位低位数。如果年份少于两位数,则用前导零填充该数字使之达到两位数。

yyy

将年份表示为三位数字。如果年份多于三位数,则结果中仅显示三位低位数。如果年份少于三位数,则用前导零填充该数字使之达到三位数。

请注意,对于年份可以为五位数的泰国佛历,此格式说明符将显示全部五位数。

yyyy

将年份表示为四位数字。如果年份多于四位数,则结果中仅显示四位低位数。如果年份少于四位数,则用前导零填充该数字使之达到四位数。

请注意,对于年份可以为五位数的泰国佛历,此格式说明符将呈现全部五位数。

yyyyy(另加任意数量的“y”说明符)

将年份表示为五位数字。如果年份多于五位数,则结果中仅显示五位低位数。如果年份少于五位数,则用前导零填充该数字使之达到五位数。

如果存在额外的“y”说明符,则用所需个数的前导零填充该数字使之达到“y”说明符的数目。

z

表示系统时间距格林威治时间 (GMT) 以小时为单位测量的带符号时区偏移量。例如,位于太平洋标准时区中的计算机的偏移量为“-8”。

偏移量始终显示为带有前导符号。加号 (+) 指示小时数早于 GMT,减号 (-) 指示小时数迟于 GMT。偏移量范围为 –12 至 +13。一位数字的偏移量设置为不带前导零的格式。偏移量受夏时制影响。有关使用单个格式说明符的更多信息,请参见


使用单个自定义格式说明符


zz

表示系统时间距格林威治时间 (GMT) 以小时为单位测量的带符号时区偏移量。例如,位于太平洋标准时区中的计算机的偏移量为“-08”。

偏移量始终显示为带有前导符号。加号 (+) 指示小时数早于 GMT,减号 (-) 指示小时数迟于 GMT。偏移量范围为 –12 至 +13。一位数字的偏移量设置为带前导零的格式。偏移量受夏时制影响。

zzz, zzz(另加任意数量的“z”说明符)

表示系统时间距格林威治时间 (GMT) 以小时和分钟为单位测量的带符号时区偏移量。例如,位于太平洋标准时区中的计算机的偏移量为“-08:00”。

偏移量始终显示为带有前导符号。加号 (+) 指示小时数早于 GMT,减号 (-) 指示小时数迟于 GMT。偏移量范围为 –12 至 +13。一位数字的偏移量设置为带前导零的格式。偏移量受夏时制影响。

:

当前


System.Globalization.DateTimeFormatInfo.TimeSeparator


属性中定义的时间分隔符,用于区分小时、分钟和秒。

/

当前


System.Globalization.DateTimeFormatInfo.DateSeparator


属性中定义的日期分隔符,用于区分年、月和日。

"

带引号的字符串(引号)。显示两个引号 (") 之间的任意字符串的文本值。在每个引号前使用转义符 (/)。

'

带引号的字符串(撇号)。显示两个撇号 (') 字符之间的任意字符串的文本值。

%

c

当自定义

DateTime

格式字符串只包含自定义格式说明符“



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

”前带有转义符 (/) 时,将该字符显示为文本。若要将反斜杠字符本身插入结果字符串,请使用两个转义符(“//”)。

任何其他字符

所有其他字符被复制到结果字符串中,而且不影响格式化。

控制面板设置

控制面板中“区域和语言选项”项中的设置会影响由格式化操作产生的结果字符串。这些设置用于初始化与当前线程区域性关联的


DateTimeFormatInfo


对象,并且当前线程区域性将提供用于控制格式设置的值。使用不同设置的计算机会生成不同的结果字符串。

DateTimeFormatInfo 属性

格式化受当前

DateTimeFormatInfo

对象的属性影响,其由当前线程区域性隐式提供或由调用格式化的方法的


IFormatProvider


参数显示提供。为

IFormatProvider

参数指定一个表示区域性的


CultureInfo


对象或指定一个

DateTimeFormatInfo

对象。

许多标准

DateTime

格式说明符是由当前

DateTimeFormatInfo

对象的属性定义的格式化模式的别名。这意味着通过更改相应的

DateTimeFormatInfo

属性可以改变由某些标准

DateTime

格式说明符产生的结果。



使用单个自定义格式说明符

自定义

DateTime

格式字符串由两个或更多字符组成。例如,如果格式字符串仅包含说明符“h”,则该格式字符串将被解释为标准

DateTime

格式字符串。但是,在这种特定情况下将引发异常,因为不存在“h”标准

DateTime

格式说明符。

若要使用单个自定义

DateTime

格式说明符,在

DateTime

说明符之前或之后添加一个空格,或在

DateTime

说明符之前添加一个百分号 (%) 格式说明符。例如,格式字符串“h ”和“%h”将被解释为自定义

DateTime

格式字符串,其显示当前

DateTime

对象所表示的小时。请注意,如果使用了空格,则该字符串在结果字符串中将显示为原义字符。

使用自定义格式字符串

下面的代码段演示如何从

DateTime

对象创建自定义格式化字符串。此示例假定当前区域性是美国英语 (en-US)。

C#
// This code example demonstrates the result yielded by each custom 
// DateTime format specifier.

using System;
using System.Globalization;

class Sample 
{
    public static void Main() 
    {
    string formatString;
    CultureInfo ci = new CultureInfo("");
    string msgDTctor = "The DateTime constructor for " + 
                       "January 3, 0001 A.D., 02:09:20.444 P.M. is/n" +
                       "    DateTime(0001, 1, 3, 14, 9, 20, 444)/n";
    DateTime thisDate  = new DateTime(0001, 1, 3, 14, 9, 20, 444);  // This is equal to DateTime thisDate  = new DateTime(0001, 1, 3, 14, 9, 20, 444, DateTime.Unspecified)
    DateTime utcDate   = new DateTime(0002, 2, 4, 15, 10, 21, 555, DateTimeKind.Utc);
    DateTime localDate = new DateTime(0003, 3, 5, 16, 11, 22, 666, DateTimeKind.Local);

// Custom DateTime format specifiers
    string[] specifiers = {
// Year
        "%y", 
        "yy", 
        "yyy", 
        "yyyy", 
        "yyyyy", 
// Month
        "%M", 
        "MM", 
        "MMM", 
        "MMMM", 
// Day
        "%d", 
        "dd", 
        "ddd", 
        "dddd",
// Era
        "%g",  
        "gg",  
// Hour
        "%h", 
        "hh", 
        "%H", 
        "HH", 
// Minute
        "%m", 
        "mm", 
// Second
        "%s", 
        "ss", 
// Fraction of a second
        "%f", 
        "ff", 
        "fff", 
        "ffff", 
        "fffff", 
        "ffffff", 
        "fffffff", 
        "%F", 
        "FF", 
        "FFF", 
        "FFFF", 
        "FFFFF", 
        "FFFFFF", 
        "FFFFFFF", 
// A.M./P.M. designator
        "%t", 
        "tt", 
// UTC offset
        "%z", 
        "zz", 
        "zzz", 
// Quoted string (apostrophe)
        "'The year is' yyyy", 
// Quoted string (quotation mark)
        "/"The year is/" yyyy",
// Escape character
        @"//", 
        };
//
     Console.Clear();
     Console.WriteLine("The culture is {0}.", ci.DisplayName);
     Console.WriteLine(msgDTctor);
     Console.WriteLine("{0,20} {1}", "Custom format string", "Yields");
     Console.WriteLine("{0,20} {1}", "--------------------", "------");
     foreach (string format in specifiers)
         {
         formatString = "/"" + format + "/"";
         Console.WriteLine("{0,20} /"{1}/"", 
                            formatString, thisDate.ToString(format));
         }

     Console.WriteLine();
     Console.WriteLine();

// Example of using "K" format specifier.
     Console.WriteLine("Format different kinds of DateTime using /"K/"");
     Console.WriteLine("{0, 20} {1}", "DateTimeKind", "Yields");
     Console.WriteLine("{0,20} {1}", "------------", "------");
     Console.WriteLine("{0,20} /"{1}/"",  thisDate.Kind,  thisDate.ToString("%K"));
     Console.WriteLine("{0,20} /"{1}/"",   utcDate.Kind,   utcDate.ToString("%K"));
     Console.WriteLine("{0,20} /"{1}/"", localDate.Kind, localDate.ToString("%K"));

    }
}

/*
This code example produces the following results:

The culture is Invariant Language (Invariant Country).
The DateTime constructor for January 3, 0001 A.D., 02:09:20.444 P.M. is
    DateTime(0001, 1, 3, 14, 9, 20, 444)

Custom format string Yields
-------------------- ------
                "%y" "1"
                "yy" "01"
               "yyy" "001"
              "yyyy" "0001"
             "yyyyy" "00001"
                "%M" "1"
                "MM" "01"
               "MMM" "Jan"
              "MMMM" "January"
                "%d" "3"
                "dd" "03"
               "ddd" "Wed"
              "dddd" "Wednesday"
                "%g" "A.D."
                "gg" "A.D."
                "%h" "2"
                "hh" "02"
                "%H" "14"
                "HH" "14"
                "%m" "9"
                "mm" "09"
                "%s" "20"
                "ss" "20"
                "%f" "4"
                "ff" "44"
               "fff" "444"
              "ffff" "4440"
             "fffff" "44400"
            "ffffff" "444000"
           "fffffff" "4440000"
                "%F" "4"
                "FF" "44"
               "FFF" "444"
              "FFFF" "444"
             "FFFFF" "444"
            "FFFFFF" "444"
           "FFFFFFF" "444"
                "%t" "P"
                "tt" "PM"
                "%z" "-8"
                "zz" "-08"
               "zzz" "-08:00"
"'The year is' yyyy" "The year is 0001"
""The year is" yyyy" "The year is 0001"
                "//" "/"

Format different kinds of DateTime using "K"
        DateTimeKind Yields
        ------------ ------
         Unspecified ""
                 Utc "Z"
               Local "-08:00"                
*/‘