2012-06-26 36 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包含或者,如果这是可变的,格式化日期,然后解析生成的字符串获得再次约会。