2008-10-08 64 views
3

我正在使用VB.NET的Web應用程序。其中還混合了VisualBasic代碼,特別是VB的Date變量和Month函數。VisualBasic月函數不一致

問題是這樣的部分:

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格式(短日期格式)。

回答

5

這通常與區域設置有關,尤其是日期/時間格式。如果您將這些格式設置爲在您測試的機器上完全相同,則結果應該一致。

您使用ParseExact的想法絕對是更好的解決方案,恕我直言。

2

這是因爲運行時必須將給定的值「10/01/2008」,這實際上是一個字符串隱式地轉換爲DateTime數據類型。

將字符串轉換爲日期或其他方式時,字符串格式取決於窗口的區域設置。

請參閱msdn上的this link

this article的方式來指定文本的日期是獨立的你的本地設置:

只是符號#封閉的日期和形式毫米指定它/ DD/YYYY:

所以代碼

Month(#10/01/2008#) 

應該給你在任何機器上的答案10。

療法在MSDN文章給出兩個worarounds:

1。使用格式化功能與predifned日期/時間格式

字面一個日期轉換爲您所在區域的 格式,或自定義 格式,提供文字到 格式功能,指定是 預定義日期/時間格式(格式 功能)或用戶定義日期/時間 格式(格式功能)。以下示例演示了這一點。

MSGBOX( 「格式化的日期爲」 & 格式(#5/31/1993年#, 「DDDD,d MMM YYYY」))

2.使用的DateTime類構建到construt右DateTime值

或者,也可以使用 日期時間結構的 重載構造函數之一以組裝日期 和時間值。以下示例 創建一個值,以在下午12:14代表May 31, 1993。

昏暗dateInMay作爲新 System.DateTime的(1993,5,31,12,14, 0)

+0

感謝您的信息。問題是,我不能使用字面格式,因爲日期字符串取自Request.QueryString,並且像這樣使用 Dim s As String = Request.QueryString(「currdate」) Dim iMonth As Int32 = Month( s) – 2008-10-08 09:04:39