我有以下VB代码 -
tAvailableDate = DateAdd("d", 21, Format(Now, gDATEFORMAT))
我正在尝试将这个转换成C#。
到目前为止,我已经转换了如下代码 -
tAvailableDate = DateAdd("d", 21, Format (DateTime.Now, Global.gDATEFORMAT));
但是我找不到DateAdd()
或Format()
功能的替代品。
有什么想法吗?谢谢。
我有以下VB代码 -
tAvailableDate = DateAdd("d", 21, Format(Now, gDATEFORMAT))
我正在尝试将这个转换成C#。
到目前为止,我已经转换了如下代码 -
tAvailableDate = DateAdd("d", 21, Format (DateTime.Now, Global.gDATEFORMAT));
但是我找不到DateAdd()
或Format()
功能的替代品。
有什么想法吗?谢谢。
DateAdd
是一个老旧的VB6方法,由于向后兼容性而被移植到VB.NET中。如果您在C#项目中包含了Microsoft.VisualBasic
命名空间,您也可以让它在C#中工作,但我不建议在C#或VB.NET中使用该方法。这是您应该采取的做法(阅读起来更加容易):
tAvailableDate = DateTime.Now.AddDays(21);
DateTime
对象转换为字符串,可以使用ToString
方法,例如:tAvailableDate.ToString(gDATEFORMAT)
。 - Steven Doggart我的VB6有点生疏,但如果我没记错的话,您想要加上21天。那么这是您需要做的:
tAvailableDate = DateTime.Now.AddDays(21);
更新
你提到你将变量从string
类型转换为DateTime
类型。如果你需要将其转换回string
类型(根据另一个评论看起来是这样),那么你需要调用:
tAvailableDate.ToString("[format string]");
如果需要帮助让您的字符串格式化成您想要的样式,请参见:http://msdn.microsoft.com/en-us/library/az4se3k1.aspx
tAvailableDate = DateAdd("d", 21, Format(Now, gDATEFORMAT))
Now
是一个 Date
。 Format
将此日期转换为字符串(确切地说是包含字符串的 Variant
),但 DateAdd
需要一个 Date
参数才能添加天数。 DateAdd
的声明如下:Function DateAdd(Interval As String, Number As Double, Date)
V6B会将字符串静默转换为Date
并传递给DateAdd
,而不是发出警告或编译器错误。因此,我的第一个假设是仅删除此Format
。
但是,根据gDATEFORMAT
的定义方式,此Format
可能会对结果产生期望的影响。如果gDATEFORMAT
只包含日期部分,则格式函数将删除时间部分!但是,这可以通过在VB6中使用Date
函数而不是Now
函数来轻松实现。
tAvailableDate = DateAdd("d", 21, Date)
或者在 .NET (C# 或 VB.NET) 中使用 DateTime.Today
。
但是 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
的内容,要么如果它是一个变量,那就格式化日期然后解析得到的字符串再次获得一个日期。