vb.net 常见时间类型问题

1.常见错误:

    (1)错误类型一:SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/999911:59:59 PM之间。

           A 原因:

                 我们在取DateTime.MinValue的值,并插入到数据库的时候,DateTime.MinValue值范围和数据库DateTime类型数据范围不一致造成的。数据库中,DateTime类型字段,最小值1/1/175312:00:00,而.NET Framework中,DateTime类型,最小值为1/1/00010:00:00,显然,超出了Sql的值的最小范围,导致数据溢出的错误。

          B 解决方案:转换时间类型格式。如:

       Dim currentDate As Date = Now()
        enWork.LogingDate =Convert.ToDateTime(Format(currentDate, "yyyy/MM/dd"))
        enWork.LoginTime =Convert.ToDateTime(Format(currentDate, "HH:mm:ss"))


     (2)错误类型二:插入数据库中的时间都是00:00:00

            A 原因:

               使用到存储过程,存储过程中时间类型是varchar,而vb.net实体类中的时间类型是Datetime,类型不匹配,未能插入成功。

           B 解决方案:将存储过程中的时间类型改为time(7)

 

     (3)错误类型三:从类型“TimeSpan”到类型“Date”的转换无效。

            A 原因:

                 从数据库中获取的时间是timeSpan类型的,需要转换成字符串类型的方可赋值给实体

            B 解决方案:

		enOnLine.OnTime =Convert.ToString(dtQuery.Rows(0).Item("onTime"))

  

2.常见方法

     (1)方法一:计算时间差--使用DateDiff函数:返回一个Long值,用于指定两个Date值之间的时间间隔数

        例如:        

	Dim Time1 As Date
        Dim Time2 As Date
        Dim Diff As String
        Diff = DateDiff(DateInterval.Minute,Time1, Time2)

        其中:DateInterval.Minute:设置时间间隔格式为分钟。(用户可根据自己具体要求设定)


     (2)方法二:时间取整--使用Format函数:返回已按照格式String表达式中包含的指令进行了格式化了的字符串

    Dim Int as String
    Int=Format(Diff, "0.0") 

       其中:这里用到的不是四舍五入,而是通过对字符串进行按照既定要求格式化得到的。


     (3)方法三:取出时间中的小时值

	Dim Time asDate
	Dim Hour asInteger
	Hour=System.DateTime.Parse(CStr( Time))

 

       方法还有很多,需要我们在项目中不断的总结经验,慢慢积累,越来越好!

 

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页