日历 System.Globalization.GregorianCalendar 中不支持该字符串所表示的DateTime
今天遇到一个问题,在通过asp.net读取mysql数据时,适配器填充数据集,出现错误:日历 System.Globalization.GregorianCalendar 中不支持该字符串所表示的DateTime,日期出现问题,查看mysql数据库发现字段类型为data,根据提示遂改为datetime,但是仍旧同样的错误,这时就纠结了,只好通过搜索引擎找答案了,这里多啰嗦一句,教稀奇的技术问题还是谷歌搜索管用,百度出来的文章太少了。
1、其中一位同样遇到此问题:
string s="2009-02-23T24:39:58Z";
DateTime t=DateTime.Parse(s);
解决方法: .Replace("T24:", "T00:"),问题是时间出现24,小时没有24,只有00点,我立即查看了字段数据的格式,发现时间格式是:0000-00-00 00:00:00,这个没错,是DateTime的格式,也没有出现24的情况。这也算是一种出现此错误的情况,分享出来。
2、另外一位和我的情况几乎一样(asp.net读取mysql数据报错),但他是在csdn以提问形式问的。后面有很多答案,有些应该还是可以解决问题的。
一位达人的解决方法:to_char(‘字段名’,’ yyyy-mm-dd ’) ,经查证to_char是Oracle数据库的函数。
3、其实,我没有确切找到答案。不过经过上面两种情况的分析,及问题的提示,是不是该在sql语句中,将日期字段格式转换成DateTime格式?后面一试,确实可以了。不过这里要注意数据库语言的区别。
解决方法:
date_format(‘字段名’,’YYYY-mm-dd HH:ii:ss’) (mysql中转换方法) 时间格式各种写法
convert(varchar, ‘字段名’, 120) (sql server中转换方法)
这里,我非常疑惑的是,我的数据库字段是date也是可以的,格式为: 0000-00-00 00:00:00,没有出现24点的情况,但为什么报错了,经过检验(新建一个日期字段,设为datetime字段类型,然后添加一条数据,没有报错,后面我再次检查我的数据,唯一不同的地方是:一些日期数据为 0000-00-00 00:00:00 ,应该是添加数据时,为空初始的日期时间。我就想将我测试的字段添加一个这样的数据,是否能够获取,果然报错)测试,问题出在字段数据含有0000-00-00 00:00:00这样的数据,转换为DateTime格式时才会提示此错误。
4、当然,还有一种最笨不太可取的办法:把mysql数据库的日期字段类型改为varchar字段类型,同样不会报错,但是数据获取后又得转换回去。
本博文章基本上属于原创或收集整理,都是心血结晶。
欢迎转载分享,转载请注明出处,谢谢!
本文地址:日历 System.Globalization.GregorianCalendar 中不支持该字符串所表示的DateTime
3 条评论
文章很好,继续加油啊
写的挺好加油啊
由 cyheng 于 2012-06-09 21:51:24 最后编辑
还是经常用这个东东的