2012-06-26 22 views
6

にVB6からDateAdd関数と書式コードを変換する -は、私は、VBに次のコードを持っている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は、古い互換性のためにVB.NETに引き継がれた古いVB6メソッドです。 Microsoft.VisualBasic名前空間をC#プロジェクトに組み込んだらC#でも動作させることができますが、C#またはVB.NETのメソッドの使用はお勧めしません。ここで(それはあまりにも読みやすいです)あなたがそれをやるべき方法は次のとおりです。

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。はい、Formatで文字列に変換してから日数を追加しようとすると意味がありません。日付は日付に追加できますが、文字列には追加できません。おそらくそれはVB6で動作し、VB6は文字列を自動的に 'Date'に変換し、このエラーをマスクします!しかし、 'gDATEFORMAT'で指定された以外の文化を使って変換すると、エラーが発生する可能性があります(例えば、日や月を反転させて)。 –

+0

ご協力ありがとうございます。そのコードは完全に機能しました。私のC#コードを書くときにVB6でFormatを削除するには、文字列ではなくDateTimeとしてtAvailable日付を宣言しました。 –

+0

フォローアップとして、私はSQLの文字列(まだvb6)を持っています。 - Format(tAvailableDate、gDATEFORMAT)C#の場合、私は単純にtAvailableDateを作ることができます。 ? –

0

私はあなたの問題上で考えていると私は昨日逃した側面があります。 Formatの機能は無意味だと思いましたが、奇妙に見えても意味があります。私に説明させてください。 VB6で

は、我々は

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

なぜそれが奇妙な(あるいは間違った)見えないがありますか? NowDateです。 Formatは、この日付をString(正確にはStringを含むVariant)に変換しますが、DateAddは、追加できるようにするためには、Dateパラメータを必要とします。 DateAddは、このように宣言されています

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

代わりに警告またはコンパイルエラーを与える、VB6は黙っDateに戻って、この文字列を変換し、DateAddに渡します。だから私の最初の仮定はちょうどこれを落とすことでしたFormat

しかし、このは、どのように結果に影響を与えることができますか?gDATEFORMATが定義されています。 gDATEFORMATに日付部分のみが含まれている場合、書式機能は時間部分を削除します!しかしながら、これは単に.NET(C#またはVB.NET)でVB6

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

又はDateTime.TodayNow機能をDate関数を使用して代わりに使用することによって達成することができます。

ただし、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に何が含まれているか知っているか、これが可変である場合には、日付をフォーマットしてから取得するには、結果の文字列を解析する必要がありますどちらか再度日付。

関連する問題