我在vb中有以下代码 -
tAvailableDate = DateAdd("d", 21, Format(Now, gDATEFORMAT))
我试图将其转换为C#。
到目前为止我已将此转换为
tAvailableDate = DateAdd("d", 21, Format (DateTime.Now, Global.gDATEFORMAT));
但我无法找到DateAdd()
或Format()
功能的替代品。
有什么想法吗?感谢。
答案 0 :(得分:12)
DateAdd
是一个旧的VB6方法,它被转移到VB.NET中以实现向后兼容。如果在C#项目中包含Microsoft.VisualBasic
命名空间,也可以在C#中使用它,但我不建议在C#或VB.NET中使用该方法。这是你应该怎么做(它也更容易阅读):
tAvailableDate = DateTime.Now.AddDays(21);
答案 1 :(得分:11)
我的VB6有点生疏,但如果我记得,你试图增加21天。所以这就是你想要做的事情:
tAvailableDate = DateTime.Now.AddDays(21);
<强>更新强>
您提到您已将变量从DateTime
转换为string
。如果您需要将其恢复为string
(看起来您可能来自其他评论),那么您想要致电:
tAvailableDate.ToString("[format string]");
有关格式化字符串的帮助,请参阅:http://msdn.microsoft.com/en-us/library/az4se3k1.aspx
答案 2 :(得分:0)
我已经考虑过你的问题了,我昨天错过了一个方面。我认为Format
函数没有任何意义,但是,即使它看起来很奇怪,它也是有道理的。让我解释一下。
在VB6中我们有
tAvailableDate = DateAdd("d", 21, Format(Now, gDATEFORMAT))
为什么它看起来很奇怪(甚至是错误的)? Now
是Date
。 Format
将此日期转换为String
(以及Variant
,其中包含String
,但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)
.NET中的或DateTime.Today
(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
包含什么,或者如果这是可变的,则格式化日期,然后解析结果字符串以再次获得日期。