C#中的DateDifference

时间:2015-04-28 01:27:57

标签: c# vsto ms-project

使用VBA进行MS Project,其中一个命令是DateDifference。

differencedate = Application.DateDifference(tsk.BaselineStart, tsk.BaselineFinish, ActiveProject.Calendar)

但是,我正在尝试将VSTO用于MS Project,但我可以弄清楚如何使用DateDifference。是否有一个等效的命令cor C#?

3 个答案:

答案 0 :(得分:1)

您可以在vsto中使用完全相同的MS Project VBA方法。将Application更改为您的MSProject.Application变量名称和前缀ActiveProject与该变量。例如,如果您的变量名称为ProjApp,请使用此:

differencedate = ProjApp.DateDifference(tsk.BaselineStart, tsk.BaselineFinish, ProjApp.ActiveProject.Calendar)

返回的值将是日期之间的持续时间(以分钟为单位),与在VBA中使用时的持续时间相同。

底线:如果您想要在VBA中获得相同的计算,请使用此方法。如果你想要在日期之间经过的时间使用C#的内置日期数学函数。在处理cpm驱动的MS项目日期时,前者最相关。

更新:我在C#中对此进行了测试,发现DateDifference方法抛出了NotImplemented异常(但在vb.net中运行正常)。由于此方法是准确计算两个日期之间持续时间的唯一方法,因此您可以将vb.net用于此部分,在解决方案中添加单独的(vb)项目。

更新2 :这是您可以从c#调用的vb.net类:

Imports Microsoft.Office.Interop

Public Class MsProjectMethods

    Public Function MsProjectDateDifference(ByVal ProjApp As MSProject.Application,
                                            ByVal startDate As DateTime,
                                            ByVal finishDate As DateTime) As Int32
        Dim returnValue As Object = ProjApp.DateDifference(startDate, finishDate)
        If IsNumeric(returnValue) Then
            Return Convert.ToInt32(returnValue)
        Else
            Throw New System.Exception("An exception has occurred.")
        End If
    End Function

End Class

以下是你如何称呼它:

ClassLibrary1.MsProjectMethods MspVb = new ClassLibrary1.MsProjectMethods();
            int differencedate = MspVb.MsProjectDateDifference(ProjApp,
                Convert.ToDateTime(tsk.BaselineStart),
                Convert.ToDateTime(tsk.BaselineFinish));

答案 1 :(得分:0)

日期存储为数字,其中1900年1月1日的天数是数字的整数部分,数字的小数部分是一天的一小部分。显示数字时,它可能会根据您用于转换为字符串的方法而有所不同。 VBA和Net Library都在内存中存储相同的数字。有些方法只显示整数,有些只显示数字的小数部分,其他方法则显示整数。显示也可能因国家/地区而异。 6.16可以是6天,6小时,6分钟或6秒。它可以是整数,只是数字的小数部分或甚至是分数的较小部分。通过简单地添加或减去存储在存储器中的数字来执行数学。希望正确对齐。

答案 2 :(得分:-1)

Timespan有以下方法

component