C#语言还是比较常见的东西,这里我们主要介绍日期型数据转换成C#长整型数据,包 括介绍DateTime 的构造函数等方面。
为什么要将日期型数据转换成C#长整型数据呢?原因很多,但就我个人来说,经常将 它用于数据库的日期存储。由于各种数据库对日期型的定义和处理是不一样的,各种语言 对日期型数据的定义的处理也各不相同,因为,我宁愿将日期型数据转换成长整型数据再 保存到数据库中。虽然也可以使用字符串来保存,但使用字符串也会涉及到许多问题,如 区域等问题,而且,它需要比保存C#长整型数据更多的空间。
日期型数据,在 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() + "\n");
this.textBox1.AppendText("DateTime from double value: " + theDate.ToString() + "\n");
}
运行结果:
Double value of now: 37494.661541713
DateTime from double value: 2002-8-26 15:52:37