我正在尝试计算在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
不太清楚这意味着什么
答案 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,你都无法将它们与任何时间点联系起来。