【问题标题】:using converters使用转换器
【发布时间】:2010-09-13 07:42:44
【问题描述】:

我必须将字符串 ("00:10:08:10") 格式化为 (10 周 08 天 10 小时)。所以我使用了一个转换器并将它与数据网格绑定一起添加。我的代码:

  Public Function Convert(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert
    Dim strList(4) As String
    Dim prefixList() As String = {"Wk", "Dy", "Hrs", "Min"}
    Dim input As String = value.ToString
    Dim Output As String = String.Empty
    If input <> String.Empty Then
        strList = input.Split(":")
        Dim itr As Integer
        For Each Str As String In strList
            If Integer.Parse(Str) <> 0 Then
                Output += Str + " " + prefixList(itr) + " "
            End If
            itr += 1
        Next
    End If
    Return Output
End Function

我正在对其进行转换,但是当我编辑数据时,再次调用转换器,我不会使用旧格式 ("00:10:08:10") 而是使用 (10 Dy 08 Hr 10 Min )。所以转换器显然失败了。我怎样才能让它发挥作用?

附加:mssql 中是否有一种数据类型可以以天数和小时数表示我的数据,这样我就不必使用这种字符串格式了。

【问题讨论】:

  • 您的代码可能会在输入“00:10:00:20”时遇到困难 - 这会是 20 分钟,还是向右 10 周?
  • 罗兰:为什么会挣扎?显然是 20 分钟。

标签: .net wpf vb.net ivalueconverter


【解决方案1】:

您需要在您的 ValueConverter 中实现 ConvertBack 函数才能将 10 Dy 08 Hr 10 Min 转换为 00:10:08:10

假设字符串格式正确,解析和转换应该不会太难。

您可以考虑使用timespan 来保存数据。它存储时间长度或持续时间。

【讨论】:

    【解决方案2】:

    关于附加:在 sql 中存储时间时,我总是使用时间戳(自 1970 年 1 月 1 日以来的毫秒数)。它们非常易于排序,并且可以在几乎所有编程语言中与 DateTime 对象(或类似对象)进行解析。

    【讨论】:

    • 但这怎么能满足我的要求呢?我必须代表特定任务的截止日期。那么如何使用时间戳来表示 10 周/ 3 天?
    • 如果您的截止日期是静态的(例如,意味着特定的截止日期),您可以将该日期存储为时间戳。然后将其转换回 DateTime 并从中减去 DateTime.Now() 。这给了你剩余的时间。您还可以将 DateTime.Now() 转换为时间戳,然后从到期日期时间戳中减去它以获得以毫秒为单位的差异。
    • @geoff - 时间跨度将是两个日期之间的差异。术语“时间戳”来自 MySQL 支持。
    猜你喜欢
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 2019-03-31
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多