我在vb中有以下代码-
tAvailableDate = DateAdd("d", 21, Format(Now, gDATEFORMAT))
我正在尝试将其转换为 C#。
到目前为止我已经转换了这个 -
tAvailableDate = DateAdd("d", 21, Format (DateTime.Now, Global.gDATEFORMAT));
但我找不到DateAdd()
orFormat()
功能的替代品。
有任何想法吗?谢谢。
我在vb中有以下代码-
tAvailableDate = DateAdd("d", 21, Format(Now, gDATEFORMAT))
我正在尝试将其转换为 C#。
到目前为止我已经转换了这个 -
tAvailableDate = DateAdd("d", 21, Format (DateTime.Now, Global.gDATEFORMAT));
但我找不到DateAdd()
orFormat()
功能的替代品。
有任何想法吗?谢谢。
DateAdd
是一种旧的 VB6 方法,它被移植到 VB.NET 中以实现向后兼容性。如果您在 C# 项目中包含命名空间,您也可以让它在 C# 中工作Microsoft.VisualBasic
,但我不建议在 C# 或 VB.NET 中使用该方法。这是你应该如何做的(它也更容易阅读):
tAvailableDate = DateTime.Now.AddDays(21);
我的 VB6 有点生锈了,但如果我记得,你正试图增加 21 天。所以这就是你想要做的:
tAvailableDate = DateTime.Now.AddDays(21);
更新
您提到您将变量DateTime
从 a 转换为 a string
。如果您需要将其恢复为 a 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
将此日期转换为 a String
(准确地说是Variant
包含 a String
),但DateAdd
需要一个Date
参数才能添加天数。DateAdd
声明如下:
Function DateAdd(Interval As String, Number As Double, Date)
VB6 没有给出警告或编译器错误,而是默默地将此字符串转换回 aDate
并将其传递给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
包含的内容,或者,如果这是可变的,则格式化日期,然后解析结果字符串以再次获取日期。