【问题标题】:I am looking to determine the difference between 2 "HH:mm:ss.fff" values in VB我正在寻找确定VB中2个“HH:mm:ss.fff”值之间的差异
【发布时间】:2016-04-18 23:40:07
【问题描述】:

我正在努力获取 datagridview 中两个单元格之间的确切值。这两个值都是 HH:mm:ss.fff 格式,但是当我尝试计算差异时,我无法在文本框中显示 .fff。我知道我需要以某种方式格式化,但我尝试的每一种方式都会出错。我的代码如下。无论如何我都不想显示日期或年份,单元格中的数据将始终与 HH:mm:ss.fff 一起出现。

提前致谢。使用 Visual Studio 2013

    Dim value2 As DateTime = DateTime.Parse(dgvConvert(3, 1).Value)
    'value is in "HH:mm:ss.fff" format i.e 08:01:05.900
    Dim value1 As DateTime = DateTime.Parse(dgvConvert(3, 2).Value)
    'value is in "HH:mm:ss.fff" format i.e 08:01:50.000

    Dim timespan2 As DateTime = DateTime.Parse(value2)
    Dim timespan1 As DateTime = DateTime.Parse(value1)

    Dim duration As TimeSpan = timespan1 - timespan2

    Dim duration1 As String = duration.ToString

    txtResult.Text = duration1.ToString
    'result is "00:00:05" but i am trying to get "00:00:05.900"
    'txtResult.Text = duration(format("HH:mm:ss.fff")) does not work.

这是我用来将 CSV 写入 DataGridView 的代码

    Private Sub btnLoadFileToConvert_Click(sender As Object, e As EventArgs) Handles btnLoadFileToConvert.Click
    ' MessageBox.Show("Make sure your file only contains numbers in the first coumn", "Check File")
    dgvConvert.Rows.Clear()
    Dim TextLine As String = ""
    Dim SplitLine() As String
    Dim fname As String = txtFileToConvert.Text
    If System.IO.File.Exists(fname) = True Then
        Dim objReader1 As New System.IO.StreamReader(fname)
        Do While objReader1.Peek() <> -1
            TextLine = objReader1.ReadLine()
            SplitLine = Split(TextLine, ",")
            Me.dgvConvert.Rows.Add(SplitLine)
        Loop
        objReader1.Close()
        objReader1.Dispose()
    Else
        MsgBox("File Does Not Exist")

    End If
    dgvConvert.RowCount = 6001

【问题讨论】:

  • 为什么要解析两次?`
  • 如果是存储在那里的 DateTime 值。你为什么要解析?
  • 将 Option Strict On 放在源代码文件的顶部,以帮助编译器帮助您。
  • LUC,我解析了两次,这就是我编写它的方式,但这并不意味着它是最好的代码。我肯定是初学者。 Plutonix,看来我需要对其进行解析才能将其放入文本框中。我无法在不解析的情况下简单地执行计算。汉斯-我不知道那是什么意思:)
  • 单元格中实际值的数据类型是什么?它们是String 对象吗? Date 对象? TimeSpan 对象?还有什么?

标签: .net vb.net parsing datetime timespan


【解决方案1】:

如果您的单元格始终包含时间值,您可以将它们解析为TimeSpan structure。然后你可以从另一个中减去一个。

如果要显示显示毫秒的值,可以使用接受格式的overload of .ToString(请注意,这与 DateTime 格式略有不同,因为某些字符需要转义。

    'values for debug
    Dim cell2Value = "08:01:05.900" 'dgvConvert(3, 1).Value.ToString
    Dim cell1Value = "08:01:50.000" 'dgvConvert(3, 2).Value.ToString

    Dim value2 = TimeSpan.Parse(cell2Value)
    Dim value1 = TimeSpan.Parse(cell1Value)

    TextBox1.Text = (value1 - value2).ToString("hh\:mm\:ss\.fff")

【讨论】:

  • 马特。谢谢你,你的评论让我重新检查。我很抱歉,但我将数据作为字符串从包含名称和时间的 csv 保存文件中带入(时间为“HH:mm:ss.000”)excel 格式。这是我用来将 csv 读取到 dgvConvert 的代码。
  • 像冠军一样工作!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-07
  • 1970-01-01
  • 2017-09-29
  • 1970-01-01
  • 2011-07-29
相关资源
最近更新 更多