vb.net默认日期.now格式与c#默认值.now格式
我是上一次发邮件来的 我必须在VB.Net WinForm应用程序中工作,我对vb.net默认日期.now格式与c#默认值.now格式,c#,vb.net,datetime,datetime-format,C#,Vb.net,Datetime,Datetime Format,我是上一次发邮件来的 我必须在VB.Net WinForm应用程序中工作,我对Date或DateTime类型有问题 我通常使用C#,但现在我遇到了这个问题,我确信这是其他程序员遇到的常见问题 我在控制面板中定义了日期时间格式,如“dd/MM/yyyy”。还可以按中的说明签入Regedit 如果,在我的WinForm中,我定义了一个像这样的变量# DateTime aa=DateTime.Now DateTime。现在以“dd/MM/YYYY”格式检索当前日期 但是如果我像这样问VB.Net D
Date
或DateTime
类型有问题
我通常使用C#,但现在我遇到了这个问题,我确信这是其他程序员遇到的常见问题
我在控制面板中定义了日期时间格式,如“dd/MM/yyyy”。还可以按中的说明签入Regedit
如果,在我的WinForm中,我定义了一个像这样的变量#
DateTime aa=DateTime.Now
DateTime。现在以“dd/MM/YYYY”格式检索当前日期
但是如果我像这样问VB.Net
Dim val As New Date
val = Date.Now
val
的当前日期格式为“MM/dd/yyyy”
即使我设定
val=Date.Now.ToString(“dd/MM/yyyy”)
val
将格式保留为“MM/dd/yyyy”
我分配给变量Datetime的每个日期,它都会自动将格式“dd/MM/yyyy”转换为“MM/dd/yyyy”
如何配置VB.Net以像C#一样接受Datetime类型?我需要它从控制面板获取它。这里没有实际的问题,但是感觉到的差异是由于VB支持
日期
文本,而C不支持。C#和VB都支持数字类型、字符串、布尔值等的文字
var str = "Hello World";
var num = 100;
var flag = true;
不过,只有VB支持日期的文本。例如,在C#中,对于硬编码日期,您必须执行以下操作:
var dt = new DateTime(1969, 6, 19);
您可以在VB中执行基本相同的操作:
Dim dt As New DateTime(1969, 6, 19)
但你也可以这样做:
Dim dt = #6/19/1969#
在VB中使用日期文字时,总是使用M/dd/yyyy格式。它根本无法使用系统设置,因为这意味着相同的代码在不同的机器上的行为不同
现在,当您在调试器中运行项目并使用监视窗口等查看变量或其他表达式的值时,如果类型支持,调试器将显示一个文本值。如果类型不支持文本,您将看到对对象调用ToString
的结果。这意味着调试器在VB项目中总是以M/dd/yyy格式显示DateTime
值,因为它显示的是文本Date
,而在C项目中显示的内容取决于您的系统设置,因为它是在DateTime
上调用ToString
的结果
但这根本不是问题。DateTime
变量的实际值不变。它们实际上根本不包含格式。它们只是系统中的数字。只有当您希望将值表示为文本时,格式才是一个问题。当您需要这样做时,您将根据您的值调用ToString
,这将遵守系统设置,无论是在VB还是C中
请注意,我在回答中使用了术语
Date
和DateTime
DateTime
是.NET类型,而Date
是一种固有的VB数据类型。这两种语言都支持其内在数据类型的文字,但只有VB具有日期的内在数据类型,这就是为什么只有VB支持文字日期。正如C#中的int
和VB中的Integer
是Int32
类型的别名一样,VB中的Date
是DateTime
类型的别名,但在C#中没有等效项。DateTime。现在
不以任何格式返回日期/时间-它是原始日期/时间值。只有当您将原始值转换为字符串表示形式(打印出来就是这样做的)时,格式化才有意义。VB中的Date
只是DateTime
的别名,因此Date.Now
和DateTime.Now
是相同的,您的观察结果一定会受到此处未显示的内容的影响。两者都没有自己的格式。当您使用Date.Now.ToString(“dd/MM/yyyyy”)
时,您声称val保留格式为“MM/dd/yyyy”,您确定吗ToString()
返回一个字符串,而不是一个日期,因此它没有多大意义。这是因为VB支持DateTime
类型的文本,而C不支持。在C#项目中的监视窗口或类似窗口中查看DateTime
的值时,可以看到调用ToString
的结果。这将遵守系统设置。在VB中,您将实际看到该值是一个文本,您可以通过将其包装在“#”分隔符中这一事实来判断它。日期始终显示为M/dd/yyyy。它不尊重系统设置,因为如果它这样做了,相同的代码在不同的机器上的工作方式就不同了。无论怎样,DateTime
的值仍然完全相同。你在试图解决一个根本不存在的问题。NETDateTime
值存储为数字,因此系统设置没有影响。只有当您需要将日期显示为文本时,格式才起作用,然后您将调用ToString
,这将在两种语言中产生完全相同的结果。
Dim dt = #6/19/1969#