VisualBasic月函数不一致

时间:2008-10-08 08:31:42

标签: vb.net

我正在使用VB.NET在Web应用程序中工作。还混合了VisualBasic代码,特别是Date变量和VB的Month函数。

问题在于这一部分:

Month("10/01/2008")

在服务器上,我得到10(10月)作为月份(这应该是正确的)。在我的机器上,我得到1(1月)(这应该是错误的)。

我的两个同事(在他们自己的机器上)得到不同的答案,一个得到1,另一个得到10。

问题是,为什么会这样?

在我的结尾,我可以通过使用.NET的DateTime的Parse(或ParseExact)函数强制所有内容为“dd / MM / yyyy”格式来解决问题。这有效。我只是想知道为什么会有不一致。

额外信息:我知道Month函数的参数应该是Date变量。代码使用字符串作为参数,Option Strict关闭,开发人员主要让VB​​做自己的转换事情。 (遗留代码维护有很多惯性......)

如果有帮助,服务器上的Microsoft.VisualBasic.dll版本为7.10.6310.4(在Framework文件夹v1.1.4322下)。我的(以及我的2位同事)机器的版本是7.10.6001.4。

编辑:已设置为dd / MM / yyyy格式(短日期格式)的所有计算机的区域设置。

2 个答案:

答案 0 :(得分:5)

这通常与区域设置有关,更具体地说与日期/时间格式有关。如果您设置这些格式,使它们在您正在测试的计算机上完全相同,则结果应该是一致的。

使用ParseExact的想法绝对是更好的解决方案,恕我直言。

答案 1 :(得分:2)

这是因为运行时必须将给定值“10/01/2008”转换为DateTime数据类型的隐式字符串。

将字符串转换为日期,反之亦然,字符串格式取决于窗口的区域设置。

请参阅msdn。上的this link

this article方式指定与您的区域设置无关的日期文字:

只需用#符号括起日期,并在表格中指定mm / dd / yyyy:

所以代码

Month(#10/01/2008#) 

应该在任何机器上给你答案10。

在msdn文章中给出了另外两个woraround:

<强> 1。使用具有预定日期/时间格式的格式函数

  

将日期文字转换为   您的区域设置的格式,或自定义   格式,提供文字   格式化函数,指定任一   预定义的日期/时间格式(格式   功能)或用户定义的日期/时间   格式(格式函数)。该   以下示例演示了这一点。

     

MsgBox(“格式化的日期是”&amp;   格式(#5/31/1993#,“dddd,d MMM   YYYY“))

<强> 2。使用DateTime-Class构造函数来构造正确的DateTime值

  

或者,您可以使用其中一个   重载的构造函数   用于组装日期的DateTime结构   和时间价值。以下示例   创建一个代表5月31日的值,   1993年下午12:14。

     

Dim dateInMay As New   System.DateTime(1993,5,31,12,14,   0)