2012-06-26 58 views
6

我在VB下面的代碼 -從VB6轉換使用DateAdd和格式代碼,以C#

tAvailableDate = DateAdd("d", 21, Format(Now, gDATEFORMAT)) 

我試圖將其轉換爲C#。

我已經將這筆迄今爲止 -

tAvailableDate = DateAdd("d", 21, Format (DateTime.Now, Global.gDATEFORMAT)); 

但我不能找到一個DateAdd()Format()功能的替代品。

任何想法?謝謝。

+6

你想達到什麼目的?如果你可以告訴我們,你只需要知道.NET的人,而不需要知道.NET *和* VB6的人。 –

回答

11

DateAdd是一箇舊的VB6方法,爲了向後兼容而被帶入到VB.NET中。如果你在C#項目中包含了Microsoft.VisualBasic命名空間,但是我不推薦在C#或VB.NET中使用該方法,那麼你可以在C#中使用它。這裏是你應該怎麼做,(它更易於閱讀太):

tAvailableDate = DateTime.Now.AddDays(21); 
+0

完美的作品。謝謝。作爲後續,我也有一個SQL字符串(仍然vb6) - 格式(tAvailableDate,gDATEFORMAT) 對於C#我可以簡單地做 - tAvailableDate。 ? –

+0

要將DateTime對象轉換爲字符串,請使用'ToString'方法,例如:'tAvailableDate.ToString(gDATEFORMAT)' –

+0

好吧。謝謝您的幫助。 –

10

我的VB6有點生疏,但如果我回想起來,您正在嘗試添加21天。因此,這裏是你想要做什麼:

tAvailableDate = DateTime.Now.AddDays(21); 

UPDATE

你提到從string轉換的變量爲DateTime。如果你需要得到它回到string(它看起來像你可能會從其他的評論),那麼你要撥打:

tAvailableDate.ToString("[format string]"); 

有關格式化您的字符串,你所希望的方式幫助,請參閱:http://msdn.microsoft.com/en-us/library/az4se3k1.aspx

+2

+1。是的,將格式轉換爲字符串並嘗試添加日期是沒有意義的。天可以添加到日期,但不能添加到字符串。可能它適用於VB6,因爲VB6會自動將字符串轉換回「Date」並因此掩蓋此錯誤!但是如果它通過使用另一種不同於'gDATEFORMAT'的文化來轉換它,它可能會產生一個錯誤(例如通過反轉日期和月份)。 –

+0

感謝您的幫助。該代碼完美工作。爲了避免在編寫我的C#代碼時使用VB6中的格式,我將tAvailable日期聲明爲日期時間而不是字符串。 –

+0

作爲一個後續行動,我也有一個SQL字符串(仍然vb6) - 格式(tAvailableDate,gDATEFORMAT)對於C#我可以簡單地使 - tAvailableDate。 ? –

0

我曾經想過在你的問題,還有就是我昨天錯過了一個方面。我認爲Format函數沒有意義,但即使它看起來很奇怪,它也可能是合理的。讓我解釋。

在VB6中,我們有

tAvailableDate = DateAdd("d", 21, Format(Now, gDATEFORMAT)) 

爲什麼它看起來奇怪的(甚至是錯誤的)? NowDateFormat將此日期轉換爲String(以及準確地包含StringVariant),但DateAdd需要Date參數以便能夠添加日期。 DateAdd聲明如下:的

Function DateAdd(Interval As String, Number As Double, Date) 

而是給予警告或編譯器錯誤,VB6這個字符串轉換默默地回到一個Date並將它傳遞給DateAdd。所以我的第一個假設是放棄這個Format

但是這個Format可能會對結果產生所需的影響,具體取決於如何定義gDATEFORMAT。如果gDATEFORMAT僅包含日期部分,則格式化功能將刪除時間部分!然而,這可以簡單地通過使用Date函數,而不是使用Now函數在VB6

tAvailableDate = DateAdd("d", 21, Date) 

DateTime.Today在.NET(C#或VB.NET)來實現的。

但是gDATEFORMAT可能只包含月份和年份。 VB6(用我的瑞士區域):

Date ==> 27.06.2012 
Format(Date,"MM.yyyy") ==> "06.2012" 
CDate(Format(Date,"MM.yyyy")) ==> 01.06.2012 

正如你所看到的,格式化的日期將不得不返回當月的第一天,在這種情況下的效果。通過增加21天,你總能得到當前的第22個月。這與將21天添加到當前日期完全不同!在C#中,你可以實現與

DateTime today = DateTime.Today; 
tAvailableDate = new DateTime(today.Year, today.Month, 22); 

同樣爲了確定哪一種方法是正確的,則必須知道什麼gDATEFORMAT包含或者,如果這是可變的,格式化日期,然後解析生成的字符串獲得再次約會。