转载将时间字符串格式化成DateTime的有趣事情 – 黄博翔 – 博客园.
最近老大要我将一个dateCalendar控件换成JQuery的datePicker控件,换了之后需要修改cs代码,我在格式化时间的时 候遇到了很有趣的事情,就是,我无论用什么样的方式格式化字符串,它都会添加一个“星期几”进去,例如它会将“2012-08-11 8: 0:00″转换成“2012-08-11 星期六 8: 0:00”。最后这个问题解决了,照成问题的原因有点让我苦笑不得。现在不说照成问题的原因,先说说我在找到原因之前学到的几种格式化时间字符串的方法:
第一种,当然是Convert这个无敌的方法了,这个里面有个方法ToDateTime(string dateTime)。
string dateTime = "2012-08-11 10:11"; Console.WriteLine(Convert.ToDateTime(dateTime));
运行结果:
第二种就是TryParseExact方法,下面是方法介绍(http://msdn.microsoft.com/zh-cn/library/ms131044.aspx):
public static bool TryParseExact( string s,//要格式化的字符串 string format,//格式化的类型 IFormatProvider provider,//提供"s"的区域性特定格式信息 DateTimeStyles style,//时间样式 out DateTime result//输出值 )
例子:
DateTime output1; DateTime.TryParseExact("2012-08-11", "yyyy/MM/dd", null, DateTimeStyles.None, out output1); Console.WriteLine(output1.ToString()); Console.WriteLine(""); Console.WriteLine(""); string dataTime = "2012-08-11 10:01:00"; DateTimeFormatInfo dtFormat = new CultureInfo("en", true).DateTimeFormat; string[] expectFormats = { "yyyy-MM-dd HH:mm:ss" }; DateTime output; DateTime.TryParseExact(dataTime, expectFormats, null, DateTimeStyles.AdjustToUniversal, out output); Console.WriteLine(output.ToString());
结果(第一个显示不是预期的):
第三种方式是ParseExact方法,下面是方法介绍(http://msdn.microsoft.com/zh-cn/library/w2sa9yss(v=VS.80).aspx):
public static DateTime ParseExact ( string s,//包含要转换的日期和时间的字符串。 string format,//s 的预期格式。 IFormatProvider provider//用于提供有关 s 的区域性特定格式信息。 )
例子:
string temp1 = "2012-08-11"; DateTime dateTemp1 = DateTime.ParseExact(temp1, "yyyy-MM-dd", CultureInfo.CurrentCulture, DateTimeStyles.None); Console.WriteLine(dateTemp1.ToString()); Console.WriteLine(""); Console.WriteLine(""); string temp2 = "2012-08-11"; DateTimeFormatInfo dtfi = new CultureInfo("zh-CN", false).DateTimeFormat; DateTime dateTemp3 = DateTime.ParseExact(temp2, "yyyy-MM-dd", dtfi, DateTimeStyles.None) ; Console.WriteLine(dateTemp3.ToString()); Console.WriteLine(""); Console.WriteLine(""); string[] DateTimeList = { "yyyy-MM-dd HH:mm:ss", "yyyy-M-d HH:mm:ss", "yyyy-M-d H:mm:ss", "yyyy-M-d H:m:ss", "yyyy-M-d HH:mm:ss", "yyyy-M-d HH:m:ss", }; DateTimeFormatInfo dtFormat1 = new CultureInfo("en-US", true).DateTimeFormat; DateTime dt = DateTime.ParseExact("2012-08-11 8: 0:00", DateTimeList, dtFormat1, DateTimeStyles.AllowWhiteSpaces ); Console.WriteLine(dt.ToString());
结果如下:
以上的结果是没有星期几的,我现在上图
这是我在修改之前的输出结果,不论使用什么方法都会输出星期六,及时我想语言特定为“en”,”en-US”等等,
后来我发现是因为我自己将WIN7系统的时间格式修改了,手动添加了表示星期几的”dddd”,
我在将”dddd”去掉后,显示就正常了,如下:
【注】:目前我没找到一种将字符串转化成DateTime的时候与系统时间格式完全无关的方法,希望知道的可以多多指教,谢谢了!