Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.NET CDate从2021年1月19日12:00:00上午12:00关闭_Vb.net - Fatal编程技术网

VB.NET CDate从2021年1月19日12:00:00上午12:00关闭

VB.NET CDate从2021年1月19日12:00:00上午12:00关闭,vb.net,Vb.net,环境:与2013年相比,.Net FW 4.5.2 我们遇到了一些奇怪的事情,CDate和datetime字符串以午夜为时间 当我们通过非午夜约会时间,我们得到 CDate(“1/18/2021 9:00:00 PM”)returns#1/18/2021 9:00 PM# CDate(“1/19/2021 12:01:00 AM”)returns#1/19/2021 12:01:00 AM# 这些都是预期的结果 然而,当我们经过时: CDate(“1/19/2021 12:00:00 AM”)它

环境:与2013年相比,.Net FW 4.5.2

我们遇到了一些奇怪的事情,CDate和datetime字符串以午夜为时间

当我们通过非午夜约会时间,我们得到

CDate(“1/18/2021 9:00:00 PM”)
returns#1/18/2021 9:00 PM#

CDate(“1/19/2021 12:01:00 AM”)
returns#1/19/2021 12:01:00 AM#

这些都是预期的结果

然而,当我们经过时:

CDate(“1/19/2021 12:00:00 AM”)
它只返回#1/19/2021#,不带时间部分

以下是运行时在断点处的值的屏幕截图:

有什么理由可以省略时间吗


更新:这个问题在以后的VS.NET版本中得到了解决,我们为当前环境提供了一个编程解决方案。

这纯粹是关于VB调试器如何表示
DateTime
文本的问题。在24小时的时间里,12:00 AM是00:00,所以基本上“没有时间”。因此,调试器不显示时间。但这实际上并不影响
DateTime
值中的内容

正如其中一条评论所指出的,VS的行为很可能已经改变,因为我在VS2019中没有看到这种行为。也许有太多人和你一样困惑。在这种情况下,您的VS版本可能会在代码和调试器中的表示形式上进行更改。尝试编写以下代码:

Dim dt=#1/1/2000 12:00 AM#
在VS2019中,我输入了它,它保持原样。我怀疑您的版本会将其更改为:

Dim dt=#1/01/2000#
不过没关系。这只是一种表现。数据不受影响


每当您想向用户显示
日期时间
值时,必须将其转换为
字符串
,并显示该值。输出中使用的格式完全在您的控制范围内,如果要包含时间,则在进行转换时指定该时间。这与VB调试器显示的内容完全无关。

这纯粹是关于VB调试器如何表示
DateTime
文本。在24小时的时间里,12:00 AM是00:00,所以基本上“没有时间”。因此,调试器不显示时间。但这实际上并不影响
DateTime
值中的内容

正如其中一条评论所指出的,VS的行为很可能已经改变,因为我在VS2019中没有看到这种行为。也许有太多人和你一样困惑。在这种情况下,您的VS版本可能会在代码和调试器中的表示形式上进行更改。尝试编写以下代码:

Dim dt=#1/1/2000 12:00 AM#
在VS2019中,我输入了它,它保持原样。我怀疑您的版本会将其更改为:

Dim dt=#1/01/2000#
不过没关系。这只是一种表现。数据不受影响


每当您想向用户显示
日期时间
值时,必须将其转换为
字符串
,并显示该值。输出中使用的格式完全在您的控制范围内,如果要包含时间,则在进行转换时指定该时间。这与VB调试器显示的内容完全无关。

您不能“丢失”时间部分,因为它是
DateTime
类型不可分割的一部分。将日期格式化为字符串或日期文字时,可能会忽略它,因为省略时默认为午夜。类似地,
42#
42.00#
完全相等。我将改写我的原始帖子,删除“丢失”您用符号包装的值。您的意思是这就是VS datetime可视化工具在调试期间输出的内容吗?在VS2015之前的版本中,省略12:00:00 AM的时间值是正常的。在较新的VS版本中,会显示完整的日期时间值。如果您实际上是按照所示对日期和时间进行硬编码,则首先不应使用
CDate
。如果您只是键入
1
而不是
CInt(“1”)
,那么您应该使用
\1/18/2021 9:00:00 PM
而不是
CDate(“1/18/2021 9:00 PM”)
,因为这是
日期。如果你从用户那里得到文本输入,那当然是另一回事,我怀疑你实际上就是这么做的。如果是WinForms,则应该使用
DateTimePicker
并直接从
Value
属性获取
DateTime
。@JeffMergler“日期实际上在字符串变量中”不能“丢失”时间部分,因为它是
DateTime
类型的组成部分。将日期格式化为字符串或日期文字时,可能会忽略它,因为省略时默认为午夜。类似地,
42#
42.00#
完全相等。我将改写我的原始帖子,删除“丢失”您用符号包装的值。您的意思是这就是VS datetime可视化工具在调试期间输出的内容吗?在VS2015之前的版本中,省略12:00:00 AM的时间值是正常的。在较新的VS版本中,会显示完整的日期时间值。如果您实际上是按照所示对日期和时间进行硬编码,则首先不应使用
CDate
。如果您只是键入
1
而不是
CInt(“1”)
,那么您应该使用
\1/18/2021 9:00:00 PM
而不是
CDate(“1/18/2021 9:00 PM”)
,因为这是
日期。如果你从用户那里得到文本输入,那当然是另一回事,我怀疑你实际上就是这么做的。如果是WinForms,你应该使用一个
DateTimePicker
,直接从
Value
属性中获取一个
DateTime
。@JeffMergler“日期实际上在一个字符串变量中”我用屏幕抓取更新了原始帖子