DataTime操作的典型错误

简介:     不同的操作系统,dateTimePicker控件读出来的时间格式会有不同。下面是win8中文版中显示的时间格式: 图1 图2 图3 图4     按照上面的时间显示格式存储到DB中,当数据取出来时,我们想当然的认为这是一个“年-月-日 时:分:秒”组成的长字符串,只需要我们按照中间的空格将其取出,就会得到一个只有两个成员的字符串数组,然后再将其对应到界面上就OK了。

    不同的操作系统,dateTimePicker控件读出来的时间格式会有不同。下面是win8中文版中显示的时间格式:

clip_image002

图1

clip_image004

图2

clip_image006

图3

clip_image008

图4

    按照上面的时间显示格式存储到DB中,当数据取出来时,我们想当然的认为这是一个“年-月-日 时:分:秒”组成的长字符串,只需要我们按照中间的空格将其取出,就会得到一个只有两个成员的字符串数组,然后再将其对应到界面上就OK了。这样处理是否OK的呢?

    实践证明,下面的代码不健壮的处理方式!在图6中,明显解析出来的是一个四个成员的数组。包含了星期和上午等信息!如果强行如何进行对应,那么就可能把类似“上午”这样的信息写到dateTimePicker这样的控件中!这样的必然会报出异常的,见图7。


  1. string[] dateList;
  2. if (tmpConf.startdate != null)
  3. {
  4.     dateList = tmpConf.startdate.Split(' ');
  5.     dateTimePicker1.Value = Convert.ToDateTime(dateList[0]);
  6.     dateTimePicker3.Value = Convert.ToDateTime(dateList[1]);
  7. }


clip_image010

图5

clip_image012

图6

clip_image014

图7


    因此,采用分割对应的方式来显示DB中存储的日期,有某些OS上是正确的,而在另外的OS上则会出现问题。

故正确的读取方式是直接取出,全字符串对应(前提是存储时要按照一定的格式进行):


  1. if (tmpConf.startdate != null)
  2. {
  3.     dateTimePicker1.Value = Convert.ToDateTime(tmpConf.startdate);
  4.     dateTimePicker3.Value = Convert.ToDateTime(tmpConf.startdate);
  5. }


clip_image016

图8

相关文章
|
5月前
解决全网90%以上的日期格式转换、日期序列等骚操作问题
解决全网90%以上的日期格式转换、日期序列等骚操作问题
解决全网90%以上的日期格式转换、日期序列等骚操作问题
|
4月前
Qt 时间戳和时间相关的转换操作
Qt 时间戳和时间相关的转换操作
82 0
|
6月前
|
JSON 小程序 JavaScript
小程序返回的时间戳转化成时间
小程序返回的时间戳转化成时间
25 0
|
6月前
|
JSON 前端开发 数据格式
全局日期请求转换处理
全局日期请求转换处理
46 0
|
10月前
|
Linux
time模块: 时间戳、结构化时间、格式化时间的获取与相互转化
time模块: 时间戳、结构化时间、格式化时间的获取与相互转化
72 0
|
11月前
|
JSON 数据格式
对象转为json字符串,时间变为时间戳的解决方法
对象转为json字符串,时间变为时间戳的解决方法
445 0
|
NoSQL 程序员 Go
如何使用ORM链式操作?如何优雅的实现软删除?
下面重点介绍一下ORM链式操作-时间维护的知识点
107 0
|
存储 关系型数据库 MySQL
一文速学-玩转MySQL时间运算函数以及时间匹配操作详解+实例代码
一文速学-玩转MySQL时间运算函数以及时间匹配操作详解+实例代码
208 0
一文速学-玩转MySQL时间运算函数以及时间匹配操作详解+实例代码
|
前端开发
前端工作小结61-时间戳转换
前端工作小结61-时间戳转换
79 0