TimeSpan不计算

时间:2014-02-17 03:51:58

标签: vb.net

我正在尝试计算在VB.NET中创建一个剩余时间计算器,它不会让我和我似乎无法弄清楚为什么。这是我的代码

    Dim PrefendinedDateTime As DateTime = "3:00:00"
    Dim TimeNow As DateTime = DateTime.Now
    Dim ElapsedTime As TimeSpan = (TimeNow - frmStartDateTime)

    Dim TimeRemaining As TimeSpan = PrefendinedDateTime - New DateTime(ElapsedTime.Ticks)

    txtTimeRemaining.Text = New DateTime(TimeRemaining.Ticks).ToString("HH:mm:ss")

我收到此错误消息:

Ticks必须介于DateTime.MinValue.Ticks和DateTime.MaxValue.Ticks之间。 参数名称:ticks

不太清楚这意味着什么

1 个答案:

答案 0 :(得分:1)

您不能将时间跨度投射到某个日期,因为这些是不同的刻度。你需要的是:

txtTimeRemaining.Text = TimeRemaining.ToString("g")

或者这个:

txtTimeRemaining.Text = TimeRemaining.ToString("hh\:mm\:ss")

请注意,与格式化日期时间相比,TimeSpan的格式字符串有何不同,:现在需要转义。这在下面的链接#2中详细解释。

参考文献:

让我们停在这里一会儿,同时我试着解释为什么它不适合你。忘记蜱,在几秒钟内思考,因为它是一个可测量的间隔,很容易掌握。假设您的时间间隔是秒。现在,您正在尝试创建一个日期,并将一秒钟传入其中。你期望得到什么?公元1秒,即第1年,第1个月等?很公平。

假设现在你的间隔为-1秒(是的,间隔可以是负数)。你会认为这是公元前1秒,对吗?不幸的是,不允许使用.NET中的否定日期。

作为一般经验法则,时间间隔(以TimeSpan表示在.NET中)和时间点(由DateTime表示)应单独处理,因为它们在逻辑上是不同的实体。但是存在单向关系,即两个日期可以代表TimeSpan。但是,TimeSpan不代表两个日期。事实上,无论你有多少TimeSpans,你都无法将它们与任何时间点联系起来。