簡體   English   中英

將DateAdd和格式代碼從VB6轉換為C#

[英]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 (以及精確的包含StringVariant ),但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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM