ITPub博客

首页 > 应用开发 > IT综合 > C# 中的类型转换之日期型数据和长整型数据之间的转换(转)

C# 中的类型转换之日期型数据和长整型数据之间的转换(转)

原创 IT综合 作者:hphubei 时间:2007-07-06 18:35:18 0 删除 编辑
9. 日期型数据和长整型数据之间的转换


为什么要将日期型数据转换为长整型数据呢?原因很多,但就我个人来说,经常将它用于数据库的日期存储。由于各种数据库对日期型的定义和处理是不一样的,各种语言对日期型数据的定义的处理也各不相同,因为,我宁愿将日期型数据转换成长整型再保存到数据库中。虽然也可以使用字符串来保存,但使用字符串也会涉及到许多问题,如区域等问题,而且,它需要比保存长整型数据更多的空间。

日期型数据,在 C# 中的参与运算的时候,应该也是转换为长整型数据来运算的。它的长整型值是自 0001 年 1 月 1 日午夜 12:00 以来所经过时间以 100 毫微秒为间隔表示时的数字。这个数在 C# 的 DateTime 中被称为 Ticks(刻度)。DateTime 类型有一个名为 Ticks 的长整型只读属性,就保存着这个值。如此,要从一个 DataTime 型数据得到 long 型值就非常简单了,只需要读出 DataTime 对象的 Ticks 值即可,如:


long longDate = DateTime.Now.Ticks;


DateTime 的构造函数中也提供了相应的,从长整型数据构造 DateTime 型数据的函数:DateTime(long)。如:


DateTime theDate = new DateTime(longDate);


但这样对于很多 VB6 程序员来说,是给他们出了一道难题,因为 VB6 中的日期型数据内部是以 Double 型表示的,将其转换为长整型后得到的仅仅是日期,而没有时间。如何协调这两种日期类型呢?

System.DateTime 提供了 double ToOADate() 和 static DateTime FromOADate(double) 两个函数来解决这个问题。前者将当前对象按原来的 double 值输出,后者则从一个 double 值获得一个 System.DateTime 对象。举例如下:


private void TestDateTimeLong() {

double doubleDate = DateTime.Now.ToOADate();

DateTime theDate = DateTime.FromOADate(doubleDate);

this.textBox1.Text = "";

this.textBox1.AppendText("Double value of now: " + doubleDate.ToString() + " ");

this.textBox1.AppendText("DateTime from double value: " + theDate.ToString() + " ");

}


运行结果:


Double value of now: 37494.661541713

DateTime from double value: 2002-8-26 15:52:37

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/79548/viewspace-924665/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    181
  • 访问量
    274756