以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  再次请教日期相减的问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=12284)

--  作者:yanzhen2010
--  发布时间:2011/8/28 15:54:00
--  再次请教日期相减的问题
 系统当前日期减一给定日期:

 e.DataRow("假出天数") =((Date.Today)-jc("停嘱日期")).TotalDays

问题在系统当前日期,请赐教



Date.Today  如何写才可以参与计算?
[此贴子已经被作者于2011-8-28 16:46:34编辑过]

--  作者:yangming
--  发布时间:2011/8/28 16:49:00
--  

日期列的一个意外

大多数时候,我们可以直接使用日期列的值。
例如假定当前表有一个日期列,可以在命令窗口正常执行下面的代码:

Dim m As Integer = CurrentTable.Current("日期").Month
Dim
d As Date = CurrentTable.Current("日期").AddYears(360)

但是如果你在命令窗口执行下面的代码,却会出现错误提示:

Dim t As TimeSpan
t =
Date.Today - CurrentTable.Current("日期")
OutPut.Show(
"距今天数:" & t.TotalDays)

要使上面的代码正确执行,可以修改为:

Dim t As TimeSpan
t =
Date.Today - CDate(CurrentTable.Current("日期"))
OutPut.Show(
"距今天数:"
& t.TotalDays)

上面的代码用CDate将列中的值转换为日期,你也许会奇怪,本来就是日期,何来转换之说,这是因为我们从某列取值的时候,不管列类型如何,得到的始终是一个Object类型的值,但是Visual Basic会自动判断真实的值类型,所以我们直接使用即可。唯一的例外就是上面这个例子:日期之间相减的时候,用CDate函数明确地转换一下。

除了用CDate转换外,还可以:

Dim t As TimeSpan
Dim
d As Date = CurrentTable.Current("日期")
t =
Date.Today - d
OutPut.Show(
"距今天数:"
& t.TotalDays)


--  作者:yanzhen2010
--  发布时间:2011/8/28 17:38:00
--  
谢谢老师指点。代码修改后计算正确
 If jc IsNot Nothing And fy IsNot Nothing Then
            e.DataRow("假出天数") =(fy("开嘱日期")-jc("停嘱日期")).TotalDays
        End If
        If jc IsNot Nothing And fy Is Nothing Then
            e.DataRow("假出天数") =(Date.Today-CDate(jc("停嘱日期"))).TotalDays
        End If
    End If


有个问题尚不明白:"开嘱日期"、"停嘱日期"均引用于其他表,
为什么: e.DataRow("假出天数") =(fy("开嘱日期")-jc("停嘱日期")).TotalDays能直接计算出假出天数,而不需转换
而: e.DataRow("假出天数") =(Date.Today-CDate(jc("停嘱日期"))).TotalDays需要将jc("停嘱日期")用CDate转换后才能计算?

--  作者:yangming
--  发布时间:2011/8/28 20:46:00
--  

只要记住就行了,呵,我想会不会和时段型有关啊?Today返回计算机的当前日期,不含时间,而Now返回计算机的当前时间(含日期)。

你可以试试用:Date.Now 看看需不需要转换呢?呵,我没用过

[此贴子已经被作者于2011-8-28 20:55:06编辑过]