早上写了一个关于接口的示例代码,结果发现了一个bug。接口中我内部将DateTime转化为12小时进制的字符串,这样就导致在用户没有指定小时时,不会默认写入00,而是12.
例如:
DateTime dt2 = new DateTime(2012, 1, 1);
Console.WriteLine("tostring:" + dt2.ToString()); //2012/1/1 0:00:00
Console.WriteLine("yyyy/MM/dd hh:mm:ss" + dt2.ToString("yyyy/MM/dd hh:mm:ss")); //2012/01/01 12:00:00
Console.WriteLine("yyyy/MM/dd HH:mm:ss" + dt2.ToString("yyyy/MM/dd HH:mm:ss")); //2012/01/01 00:00:00
这里的HH和hh不能弄混。
摘自msdn: http://msdn.microsoft.com/zh-cn/library/8kb3ddd4(v=vs.80).aspx
HH, HH(另加任意数量的“H”说明符) 将小时表示为从 00 至 23 的数字,即通过从零开始的 24 小时制表示小时,自午夜开始对小时计数。一位数字的小时数设置为带前导零的格式。
hh, hh(另加任意数量的“h”说明符) 将小时表示为从 01 至 12 的数字,即通过 12 小时制表示小时,自午夜或中午开始对整小时计数。因此,午夜后经过的某特定小时数与中午过后的相同小时数无法加以区分。小时数不进行舍入,一位数字的小时数设置为带前导零的格式。例如,给定时间为 5:43,则此格式说明符显示“05”。