我正在使用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格式(短日期格式)的所有计算机的区域设置。
答案 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)