vb6 DateSerial到C#等效

网上商店

成员
已加入
2011年10月15日
留言内容
21
编程经验
10+
我正在将旧的VB6代码转换为C#,这是我的新手。

lTempDays = Int(DateSerial(年份(开始日期)+增量,月份(开始日期),天(开始日期)))


在C#变量中,我们有:

long lTempDays;
(增加通过的时间)
(startdate作为字符串传递)

DateTime日期= Convert.ToDateTime(startdate);

我知道我可以将date.Year,date.Month和date.Day传递给DateSerial类型方法。

但是,执行上述操作并分配给lTempDays的与vb6 DateSerial等效的DateSerial是什么?

谢谢。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
您甚至不需要问这个问题。您正在使用DateTime类型,因此您应该已经阅读了该类型的MSDN文档。如果有的话,您会发现有一个构造器需要使用Date,Serial函数和Year,month和day值。 MSDN文档应该始终是您的第一站电话,考虑到通过VS上的“帮助”菜单只需单击几下,因此有理由或不使用它的借口。如果您不熟悉某个类型或成员,请阅读该类型或成员的文档。在这种情况下,您想要的信息唾手可得,在其他许多场合也是如此。
 

网上商店

成员
已加入
2011年10月15日
留言内容
21
编程经验
10+
我是否提到我是"newbie"?

我在C#上读了很多书,看了很多YouTube视频。但是您假设我知道我可以做到您所说的。

首先,我不知道应该更深入地研究DateTime类型。我来自VB6世界。我们没有深入探讨类的类型。

我在网上搜索了DateSerial和C#,却没有任何用处。您看,我没有将DateTime连接到DateSerial。

无论如何,谢谢您的答复。

:)
 

网上商店

成员
已加入
2011年10月15日
留言内容
21
编程经验
10+
使困惑

好吧,我真的很困惑。

我去了“帮助”并单击了MSDN论坛。

然后,在所有试图找到信息的地方单击鼠标之后,我注意到一个搜索框,并键入DateTime(开始时我没有与DateSerial关联)。

现在,我已经有了以前用Intellisense看到过的全部方法列表,但是没有一个关于SERIAL的任何内容。

阅读所有说明,我发现ToBinary"serializes"转换为64位二进制值。但这是VB6中的DateSerial做什么的吗?

无论如何,我想我将不得不创建一个测试VB6应用程序,看看是否有苹果尝试这些方法。

我最初的问题是找出是否有人知道哪种方法可以直接替代DateSerial。得到答案似乎并不像建议的那么容易,但我会继续坚持下去。

谢谢。
 

网上商店

成员
已加入
2011年10月15日
留言内容
21
编程经验
10+
我搜索并花了大量时间尝试自己回答这个问题。

我的VB6文本代码如下所示:

C#:
Private Sub Command1_Click()
Dim sDate As Date
Dim lDate As Long




    sDate = Text1.Text
    
    lDate = DateSerial(Year(sDate), Month(sDate), Day(sDate))
    
    Text1.Text = lDate




End Sub

然后尝试在C#中优化一个方法,该方法将返回与VB6示例相同的结果,我尝试了几种方法,包括为将DateTime转换为Long Variable而建议的Ticks。但这并没有给我像VB6代码一样长的值。

C#:
       private void button1_Click(object sender, EventArgs e)
        {
            DateTime Date;
            long lDate;


            Date = Convert.ToDateTime(textBox1.Text);


            DateTime t = new DateTime(Date.Year, Date.Month, Date.Day);


            lDate = t.Ticks;


            textBox1.Text = Convert.ToString(lDate);


        }

现在我试图找到"easy to find"按照建议对这个问题的答案,但是说真的,我认为我的问题并不是那么糟糕。

请注意,在我为自己解决这个问题之前,我从未提过任何问题。

显然我缺少了一些东西。但是现在我得到的印象是,初学者不应该在这里问初学者的问题。
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,076
地点
挪威
编程经验
10+
DateSerial函数(Visual Basic)表示:
返回表示指定年,月和日的Date值,并将时间信息设置为午夜(00:00:00)。
DateTime.Date属性(系统)
Property Value said:
与该实例具有相同日期的新对象,并且时间值设置为午夜12:00:00(00:00:00)。
这似乎与您要查找的结果相同,尽管如果Date值最初只是从y / m / d值创建的,甚至不需要此结果。

至于将Date值转换为String值,请查看DateTime结构必须提供的各种ToString方法。
 

网上商店

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

VB6代码返回41618(在传递日期时转换为Long变量"12/10/2013"),而使用DateTime.Date似乎无法获得相同的值。

我试过了 ...



lDate = t.Date;
lDate = Convert.ToInt64(t.Date);

似乎无法使所有这些正常工作。

我正在下载VB6到C#的转换器,看它是否可以为我提供一些线索。

谢谢。
 

网上商店

成员
已加入
2011年10月15日
留言内容
21
编程经验
10+
我不知道是否有一个等效于VB6 DateSerial()的C#,但是当我使用VB6至C#转换器应用程序时,它提供了以下解决方案:

使用Microsoft.VisualBasic;
使用VB6 = Microsoft.VisualBasic.Compatibility.VB6.Support;

(请确保添加引用)

C#:
       private void button1_Click(object sender, EventArgs e)
        {
            


            System.DateTime sDate = DateTime.Parse("12/10/2013");


            int lDate = Convert.ToInt32(DateAndTime.DateSerial(sDate.Year,sDate.Month,DateAndTime.Day(sDate)).ToOADate());


            textBox1.Text = lDate.ToString();






        }

这提供了预期的41618的输出。

:)
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
我是否提到我是"newbie"?

我在C#上读了很多书,看了很多YouTube视频。但是您假设我知道我可以做到您所说的。

是的,我假设您可以单击IDE上的“帮助”菜单。 VB6已经有一个不好的名字,所以要怪你"from the VB6 world"由于无法使用“帮助”,因此没有任何帮助。您不需要任何编程经验即可搜索和阅读文档。
 

网上商店

成员
已加入
2011年10月15日
留言内容
21
编程经验
10+
也许不是。但是已经解决了,回答我的问题并不像您单击“帮助”所暗示的那样容易。

显然,DateTime并没有为我提供解决方案,正如您从我的上一次答复中看到的那样,它显示的复杂程度更高。

为了公平起见,您的最初答复做出的假设是不适用的,可能比说出我懒惰更有用。

此外,您可以向每个提出问题的人说"搜索和阅读文档。"但是在某个时候,您只需要停下来问一下,您不觉得吗?

不管怎么说,还是要谢谢你。
 
Last edited:

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,076
地点
挪威
编程经验
10+
System.DateTime sDate = DateTime.Parse("12/10/2013")
与...的值相同
DateAndTime.DateSerial(sDate.Year,sDate.Month,DateAndTime.Day(sDate))
因此,后者是不必要的。

我首先看不到您要转换 日期到整数 (然后将其显示为字符串),但是您应该已经看到DateSerial除了创建日期时间设置为0的日期值之外什么都不做,现在对您没有用。
 

网上商店

成员
已加入
2011年10月15日
留言内容
21
编程经验
10+
我只将其显示为字符串以查看结果。

整个过程是将我的旧VB6代码转换为C#,因为我正在尝试学习C#,并且没有理由只因为我对此感到满意而不得不继续回到VB6。

使用原始的VB6代码,将DateSerial的结果放入LONG变量中。

返回的值"12/10/2013"假定为41618,因为它将作为int传递给另一个过程。

我无法将DateTime的返回值转换为Long或Int类型,这将为我提供与VB6 DateSerial行完全相同的结果(41618)。

有什么想法吗?

谢谢。
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,076
地点
挪威
编程经验
10+
我无法将DateTime的返回值转换为Long或Int类型,这将为我提供与VB6 DateSerial行完全相同的结果(41618)。
您已经做到了,您只是要意识到这一点。
变种 date = DateTime.Parse("12/10/2013"); // culture dependent string format, for instance US
var oleDate = date.ToOADate(); // value 41618.5
var intDate = Convert.ToInt32(oleDate); // value 41618
 

网上商店

成员
已加入
2011年10月15日
留言内容
21
编程经验
10+
那正是我要的,是在我的第一个帖子问题中找出如何做到这一点的,但是却被告诫要通过帮助阅读MSDN(这对我完全没有帮助)。

这是第一次使用.ToOADate或使用type"var"。我在尝试转换时遇到错误。

作为一个尝试学习如何解决此问题的新手,这就是我希望找出的原因,因为在我的在线搜索中找不到该解决方案。

您会说这仅仅是沟通失败吗? :)

非常感谢你!
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,076
地点
挪威
编程经验
10+
这是第一次使用.ToOADate,
是您在第8章中首次提到ToOADate方法。
or to use type "var".
变种不是类型,它是类型推断变量声明,意味着变量获取分配的表达式的类型。 变种 (C# Reference) 我习惯从VB.Net键入推断,并继续在C#中使用它,这也是因为我已经对数据类型有了很好的了解。实际上,起初我对C#IDE感到失望,因为我无法像在VB.Net中那样通过悬停变量名来看到推断的类型,直到我发现在C#中必须悬停'var'才能看到它。
 
最佳 底部