DateSerial(vb6)等同于double类型

网上商店

成员
已加入
2011年10月15日
留言内容
21
编程经验
10+
我正在将VB6中的一些旧代码转换为C#。我是C#的新手,因此无法通过搜索找到该问题的答案。

这是VB6代码段:

Dim fJulianDay0作为Double
Dim fJulianDate作为Double
Dim iYear作为Integer
Dim iMonth作为整数
昏暗的iDay作为整数

iYear =年(dDate):iMonth =月(dDate):iDay =天(dDate)
fJulianDay0 = CDbl(DateSerial(iYear,1&, 1&)) + 1.5
fJulianDate = CDbl(DateSerial(iYear,iMonth,iDay))+ 1.5


这是我尝试转换为C#的尝试:

double fJulianDay0,fJulianDate;
int iYear,iMonth,iDay;

iYear = DateTime.Parse(dDate).Year;
iMonth = DateTime.Parse(dDate).Month;
iDay = DateTime.Parse(dDate).Day;


这是我被困的地方:

改变中...

fJulianDay0 = CDbl(DateSerial(iYear,1&, 1&)) + 1.5
fJulianDate = CDbl(DateSerial(iYear,iMonth,iDay))+ 1.5

...到C#。

我在想...

fJulianDay0 =(double)(DateTime(iYear,1,1))+ 1.5);

...但这给我一个错误。

请帮忙。 :矛盾性:

TIA
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
而不只是说"here's my code"并期望我们能完成这项工作,因此最好准确地说明您要实现的目标。 C#开发人员很有可能没有使用VB6的经验,那么为什么他们会知道DateSerial的功能呢?我已经在VB.NET和C#中进行编码9年了,但是我从未使用过VB6,所以即使我也不知道它的作用。如果您解释了您要实现的目标,那么我们可以尝试提供最佳的解决方案以用C#来实现,而VB6代码的外观实际上并不重要。

现在查找了DateSerial之后,我看到它只是从年,月和日中创建了一个Date。 .NET DateTime结构具有一个完全可以执行此操作的构造函数,因此应使用此构造函数。

不过,您将无法在C#中将DateTime转换为双精度型。 VB CDbl运算符不只是强制转换,而且如果需要将一种类型的值转换为另一种类型,则可以进行一些按摩。 C#认为强制转换和转换完全是不同的操作。在VB中传递日期时,CDbl返回的值到底代表什么,它与常规日期值到底有什么关系?
 

网上商店

成员
已加入
2011年10月15日
留言内容
21
编程经验
10+
你好。

我很抱歉我的问题的措辞方式。坦率地说,虽然我了解VB6的大部分内容,但我不一定了解某些代码部分想要完成的工作,而只是将代码从我以前编写的VB6中有用的例程转换而来。

我怀疑该代码用于从整数Year,Month和Day创建类型为double的JULIAN DATE,然后向其添加1.5。为什么加1.5?我不知道。

我相信CDbl会转换日期'string'?增值。

这种方法怎么样?

dDate是一个字符串,顺便说一句。



经过大量搜索后找到了以下代码片段:

公共静态长ToJulian(DateTime dateTime)
{
int day = dateTime.Day;
int month = dateTime.Month;
int year = dateTime.Year;
if (month < 3)
{
month = month + 12;
year = year - 1;
}
返回日+(153 *月-457)/ 5 + 365 *年+(年/ 4)-(年/ 100)+(年/ 400)+ 1721119;
}



double fJulianDay0,fJulianDate;

//将字符串日期转换为日期时间

约会时间 日期= 转变.ToDateTime(dDate);

//确定今年的朱利安日期和日期

约会时间 dBegYear = 新的 约会时间(date.Year,1,1);

fJulianDay0 = ToJulian(dBegYear)+ 1.5;
fJulianDate = ToJulian(date)+ 1.5;

我的方法有效吗?我知道函数ToJulian会返回很长的时间。加上1.5会使它成为一个double变量,从而有效地赋给double变量吗?

(PS:我仍然只是学习可用的调试工具。尚不确定如何仅测试一小段代码,因此只想看看我的LOGIC思维方式是否还可以。)


谢谢。
 
Last edited:

网上商店

成员
已加入
2011年10月15日
留言内容
21
编程经验
10+
我知道这是一个旧线程,但是我仍然没有解决此问题,因此暂时搁置了一段时间。现在我回到它。

iYear是保存年份的整数。在此示例中,iYear = 1989。

下一行返回代表日期的双精度值"1989", "1", "1". January 1, 1989.

C#:
fJulianDay0 = CDbl(DateSerial(iYear,1&, 1&)) + 1.5

fJulianDay0的两倍结果是32510.5

我试图弄清楚如何用C#做同样的事情。搜索说DateTime有DateSerial方法,但是我还没有弄清楚如何使用它。它没有显示在我的智识中。

下一行是:

C#:
fJulianDate = CDbl(DateSerial(iYear,iMonth,iDay))+ 1.5

在iYear是1989的情况下,iMonth = 12,iDay = 18。

fJulianDate等于32861.5

我已经尝试了很多事情,但仍然无法获得C#返回与DateSerial的VB代码相同的值(32510.5和32861.5)。

有人指出我正确的方向吗?

谢谢。
 
最佳 底部