日历 System.Globalization.GregorianCalendar 中不支持该字符串所表示的DateTime

作者: unvs 分类: ASP.NET 发布时间: 2012-05-15 13:08 ė118,849 views 63条评论

今天遇到一个问题,在通过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 条评论

  1. 四平网络公司 2012 年 5 月 15 日 下午 3:27 回复

    文章很好,继续加油啊

    cyheng 于 2012-05-15 21:58:57 回复

    谢谢支持!!!

  2. 长春时尚 2012 年 5 月 16 日 上午 10:13 回复

    写的挺好加油啊
    由 cyheng 于 2012-06-09 21:51:24 最后编辑

  3. 活性炭 2012 年 6 月 2 日 上午 10:13 回复

    还是经常用这个东东的

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Ɣ回顶部