[英]Converting DateAdd and Format code from VB6 to C#
我在vb中有以下代碼 -
tAvailableDate = DateAdd("d", 21, Format(Now, gDATEFORMAT))
我試圖將其轉換為C#。
到目前為止我已將此轉換為 -
tAvailableDate = DateAdd("d", 21, Format (DateTime.Now, Global.gDATEFORMAT));
但我找不到DateAdd()
或Format()
功能的替代品。
有任何想法嗎? 謝謝。
DateAdd
是一個舊的VB6方法,它被轉移到VB.NET中以實現向后兼容。 如果你在C#項目中包含了Microsoft.VisualBasic
命名空間,你也可以在C#中使用它,但我不建議在C#或VB.NET中使用該方法。 這是你應該怎么做(它也更容易閱讀):
tAvailableDate = DateTime.Now.AddDays(21);
我的VB6有點生疏,但如果我記得,你試圖增加21天。 所以這就是你想要做的:
tAvailableDate = DateTime.Now.AddDays(21);
UPDATE
您提到您已將變量從string
轉換為DateTime
。 如果您需要將其恢復為string
(看起來您可能來自其他評論),那么您想要調用:
tAvailableDate.ToString("[format string]");
有關格式化字符串的幫助,請參閱: http : //msdn.microsoft.com/en-us/library/az4se3k1.aspx
我已經考慮過你的問題了,我昨天錯過了一個方面。 我認為Format
功能毫無意義,但是,即使看起來很奇怪,它也有意義。 讓我解釋。
在VB6中我們有
tAvailableDate = DateAdd("d", 21, Format(Now, gDATEFORMAT))
為什么它看起來很奇怪(甚至是錯誤的)? Now
是一個Date
。 Format
將此日期轉換為String
(以及精確的包含String
的Variant
),但DateAdd
需要Date
參數才能添加天數。 DateAdd
聲明如下:
Function DateAdd(Interval As String, Number As Double, Date)
VB6靜默地將此字符串轉換回Date
並將其傳遞給DateAdd
,而不是發出警告或編譯器錯誤。 所以我的第一個假設就是放棄這個Format
。
但是這種Format
可以對結果產生預期的效果,具體取決於gDATEFORMAT
的定義方式。 如果gDATEFORMAT
只包含日期部分,格式函數將刪除時間部分! 但是,這可以通過使用Date
函數而不是在VB6中使用Now
函數來實現
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
包含什么,或者如果這是變量,則格式化日期,然后解析結果字符串以再次獲取日期。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.