1. const、readonly、static
- const修饰的字段表示是常量,其本质上在编译完成,执行之前其字段的真实值已经被写在了DLL中了。只有在声明的时候才能改变其值
- readOnly表示只读的,其只有在声明的时候和构造函数中能被修改。通过编译后的代码可以看到,其实是在构造函数中赋值的
- static静态的,在一个地方修改,对所有的对象都是有效的。其使用类名.字段名来访问的。
- Static readonly 对所有的对象都是有效的,只读的。其使用对象.字段名来访问。注意:和readonly不同的是,其只有在声明的时候和静态构造函数中才可以赋值。
2. 时间字符串格式化
d 月中的某一天。一位数的日期没有前导零。
dd 月中的某一天。一位数的日期有一个前导零。M 月份数字。一位数的月份没有前导零。
MM 月份数字。一位数的月份有一个前导零。yyyy 包括纪元的四位数的年份。
h 12 小时制的小时。一位数的小时数没有前导零。
hh 12 小时制的小时。一位数的小时数有前导零。
H 24 小时制的小时。一位数的小时数没有前导零。
HH 24 小时制的小时。一位数的小时数有前导零。m 分钟。一位数的分钟数没有前导零。
mm 分钟。一位数的分钟数有一个前导零。s 秒。一位数的秒数没有前导零。
ss 秒。一位数的秒数有一个前导零。f 秒的小数精度为一位。其余数字被截断。
ff 秒的小数精度为两位。其余数字被截断。
String.Format("{0:y yy yyy yyyy}", dt); // "8 08 008 2008" year
String.Format("{0:M MM MMM MMMM}", dt); // "3 03 Mar March" month
String.Format("{0:d dd ddd dddd}", dt); // "9 09 Sun Sunday" day
String.Format("{0:h hh H HH}", dt); // "4 04 16 16" hour 12/24
String.Format("{0:m mm}", dt); // "5 05" minute
String.Format("{0:s ss}", dt); // "7 07" second
String.Format("{0:f ff fff ffff}", dt); // "1 12 123 1230" sec.fraction
String.Format("{0:F FF FFF FFFF}", dt); // "1 12 123 123" without zeroes
String.Format("{0:t tt}", dt); // "P PM" A.M. or P.M.
String.Format("{0:z zz zzz}", dt); // "-6 -06 -06:00" time zone