vb.net减去两个excel单元格的日期和时间

时间:2014-09-18 02:52:24

标签: vb.net

您好,我有这个程序可以让您开始和停止工作的时间我现在遇到的问题是,如果在跟踪时间的情况下从A.M切换到P.M,程序将无法正常工作。所以我有一个按钮将Time.Now置于excel单元格中,而不是当你停止作业时它将结束时间放在另一个单元格中然后它进入并抓取两个单元格并减去它们。我需要它做的是将日期和时间放在单元格中然后两者都只给我一分钟和小时。这就是我的代码所在。

'This code is for when you start the job.
'which this is only hours and minutes prob should be
'Date and Time
Dim StartTime As String = DateTime.Now.ToString("h\:mm")

'This line of code puts it in an excel cell
oXL.ActiveCell.Offset(0, 13).Value = StartTime

'This code is for when you end a Job.
'Again its only hours and minutes but prob should be 
'Date and Time 
Dim EndTime As String = DateTime.Now.ToString("h\:mm")

'This is the Total Time I am going to have
'I used TimeSpan
Dim TotalTime As TimeSpan

'Now this is where I put the End time when the 
'Button is clicked.
oXL.ActiveCell.Offset(0, 14).Value = EndTime

'Once Both cells have the start and end Times I get them both with this code.
'Again this should prob be Date and Time.
Dim time1 = TimeSpan.ParseExact(oXL.ActiveCell.Offset(0, 13).Value, "h\:mm", CultureInfo.CurrentCulture)
Dim time2 = TimeSpan.ParseExact(oXL.ActiveCell.Offset(0, 14).Value, "h\:mm", CultureInfo.CurrentCulture)

'I then use this code to do my math.
TotalTime = time2 - time1

我需要的总时间我只需要一分钟就可以完成这项工作。

2 个答案:

答案 0 :(得分:0)

您正在处理两个日期,转换它们并将它们存储到字符串变量中,然后将它们读回日期以进行计算。当你解析它们时,你希望它们的格式正确,这本身就是最重要的。但为什么将日期存储为字符串呢?您可以使用.ToString()方法随时将日期转换为字符串。只需将它们保留为日期,并在需要时将它们作为字符串写入excel表。这两种值都是相同的,并且您不依赖于工作表将数据放在相邻位置,您只需执行计算即可完成。

    'This code is for when you start the job.
    'which this is only hours and minutes prob should be
    'Date and Time
    Dim StartTime As DateTime = DateTime.Now

    'This line of code puts it in an excel cell
    oXL.ActiveCell.Offset(0, 13).Value = StartTime.ToString("h\:mm")

    'This code is for when you end a Job.
    'Again its only hours and minutes but prob should be 
    'Date and Time 
    Dim EndTime As DateTime = DateTime.Now


    'Now this is where I put the End time when the 
    'Button is clicked.
    oXL.ActiveCell.Offset(0, 14).Value = EndTime.ToString("h\:mm")

    'Once Both cells have the start and end Times I get them both with this code.
    'Again this should prob be Date and Time.
    ' Dim time1 = TimeSpan.ParseExact(oXL.ActiveCell.Offset(0, 13).Value, "h\:mm", CultureInfo.CurrentCulture)
    ' Dim time2 = TimeSpan.ParseExact(oXL.ActiveCell.Offset(0, 14).Value, "h\:mm", CultureInfo.CurrentCulture)

   'This is the Total Time I am going to have
    'I used TimeSpan
    Dim TotalTime As TimeSpan

    'I then use this code to do my math.
    TotalTime = EndTime.Subtract(StartTime)

    'output time difference
    MsgBox(TotalTime.ToString)

:编辑:

为您举例说明总小时数和分钟数:

    Dim startTime As DateTime = DateTime.Now 'read from excel instead
    Dim endTime As DateTime = DateTime.Now.AddDays(1.5).AddMinutes(60) 'read from excel

    Dim span As TimeSpan
    span = endTime.Subtract(startTime)

    MessageBox.Show("Total Hours: " & (span.Days * 24) + span.Hours & ", Total Mins: " & span.Minutes)

答案 1 :(得分:0)

我希望这能够帮助您计算(抓取开始和结束日期字符串,将其转换为DateTime,然后输出小时和分钟):

    'This code is for when you start the job.
    'which this is only hours and minutes prob should be
    'Date and Time
    Dim StartTime As String = DateTime.Now.ToString("h\:mm")

    'This code is for when you end a Job.
    'Again its only hours and minutes but prob should be 
    'Date and Time 
    Dim EndTime As String = DateTime.Now.AddHours(3.5).ToString("h\:mm")

    'This is the Total Time I am going to have
    'I used TimeSpan
    Dim TotalTime As TimeSpan

    'Once Both cells have the start and end Times I get them both with this code.
    'Again this should prob be Date and Time.
    Dim time1 = DateTime.Parse(StartTime)
    Dim time2 = DateTime.Parse(EndTime)

    'I then use this code to do my math.
    TotalTime = time2 - time1

    Dim Hours = TotalTime.Hours
    Dim Minutes = TotalTime.Minutes

    System.Console.WriteLine(Hours & "h " & Minutes & "m")