7

我在vb中有以下代码-

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

我正在尝试将其转换为 C#。

到目前为止我已经转换了这个 -

tAvailableDate = DateAdd("d", 21, Format (DateTime.Now, Global.gDATEFORMAT));

但我找不到DateAdd()orFormat()功能的替代品。

有任何想法吗?谢谢。

4

3 回答 3

12

DateAdd是一种旧的 VB6 方法,它被移植到 VB.NET 中以实现向后兼容性。如果您在 C# 项目中包含命名空间,您也可以让它在 C# 中工作Microsoft.VisualBasic,但我不建议在 C# 或 VB.NET 中使用该方法。这是你应该如何做的(它也更容易阅读):

tAvailableDate = DateTime.Now.AddDays(21);
于 2012-06-26T13:55:36.447 回答
11

我的 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

于 2012-06-26T13:54:50.887 回答
0

我已经考虑过你的问题,昨天我错过了一个方面。我认为这个Format功能没有意义,但是,即使它看起来很奇怪,它也可以有意义。让我解释。

在 VB6 中,我们有

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

为什么它看起来很奇怪(甚至是错误的)?Now是一个DateFormat将此日期转换为 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函数而不是使用NowVB6中的函数来实现

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包含的内容,或者,如果这是可变的,则格式化日期,然后解析结果字符串以再次获取日期。

于 2012-06-27T13:44:07.387 回答