天天看点

在C#中将日期转换为字符

在许多数据库设计中都习惯于将日期字段的属性设置为字符类型,也就是将时间或日期存储为字符串,在数据存储时,一般要经过转换才能存储。实现将日期变量转换为字符可以采用日期类提供的属性和方法,这些特定属性和方法都只能将日期转换为某一种日期格式所对应的字符,而且这些属性和方法众多,记忆不便,例如

DateTime.Now.Date.ToShortDateString()或

DateTime.Now.ToShortDateString(),只能将当前日期转换为 2008-2-3 ,在实际的编程中,只要记住几个代表时间和日期格式的字母,用日期类的方法DateTime.ToString(string 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

例如DateTime.Now.ToString("D")得到字符串 2008年 2月 3日 。

以上是 标准的时间和日期格式表示方法,还有一些用户可自定义的时间日期格式表示方式,这些格式可以自由组合:

格式模式          说明

 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.Now.ToString("yyyyMMddHHmmssffff")则得到字符串200802031530231875。

同样,运用这些日期格式还可以通过DateTime.Parse(string format)方法,将字符表示的日期转换为日期变量,不过日期字符串必须是合法的日期格式。