VB.NET中的日期时间转换
刚刚学习VB.NET不久,在做几个小例子的时候发现经常要对日期时间和字符串之间进行转换,现整理如下,如有不正确的地方请大家指出。 1.字符型和日期型之间的转换日期型转换为字符型是最简单的,可以直接转换。
Dim
dt
As
Date
=
Now
Debug.WriteLine( " dt.ToLongDateString= " + dt.ToLongDateString) Debug.WriteLine( " dt.ToLongTimeString= " + dt.ToLongTimeString) Debug.WriteLine( " dt.ToShortDateString= " + dt.ToShortDateString) Debug.WriteLine( " dt.ToShortTimeString= " + dt.ToShortTimeString) Debug.WriteLine( " dt.ToFileTime= " + dt.ToFileTime.ToString) Debug.WriteLine( " dt.ToFileTimeUtc= " + dt.ToFileTimeUtc.ToString) Debug.WriteLine( " dt.ToLocalTime= " + dt.ToLocalTime.ToString) Debug.WriteLine( " dt.ToOADate= " + dt.ToOADate.ToString) Debug.WriteLine( " dt.ToUniversalTime= " + dt.ToUniversalTime.ToString) Debug.WriteLine( " dt.ToString= " + dt.ToString) Debug.WriteLine( " dt.ToString(yyyy/MM/ddhh:mm:ss:fff)= " + dt.ToString( " yyyy/MM/ddhh:mm:ss:fff " )) 结果如下: dt.ToLongDateString = 2007年4月16日 dt.ToLongTimeString = 15 : 10 : 21 dt.ToShortDateString = 2007 / 04 / 16 dt.ToShortTimeString = 15 : 10 dt.ToFileTime = 128211774217140929 dt.ToFileTimeUtc = 128211774217140929 dt.ToLocalTime = 2007 / 04 / 16 15 : 10 : 21 dt.ToOADate = 39188.6321957639 dt.ToUniversalTime = 2007 / 04 / 16 6 : 10 : 21 dt.ToString = 2007 / 04 / 16 15 : 10 : 21 dt.ToString(yyyy / MM / ddhh:mm:ss:fff) = 2007 / 04 / 16 03 : 10 : 21 : 714 用dt.ToString("yyyy/MM/dd hh:mm:ss:fff")是最方便的,可以转换为任意一种想要的字符串。
dt.ToString(yyyy
/
MM
/
ddhh:mm:ss:fff)
=
2007
/
04
/
16
03
:
13
:
13
:
884
dt.ToString(yyyy / MM / ddHH:mm:ss:fff) = 2007 / 04 / 16 15 : 13 : 13 : 884 特别值得注意的是月【MM】和分【mm】,如果两者写错了很难发现。大小写需要注意的地方:
年
Year
yyyy小写固定
月 Month MM大写固定 日 Day dd小写固定 时 Hour HH或者hh大小写均可 分 Minute mm小写固定 秒 Second ss小写固定 毫秒Millisecondff或者FF大小写均可(最大7位)
Dim
dt
As
DateTime
=
Now
Debug.WriteLine( " dt.ToString(yyyy/MM/ddhh:mm:ss:fff)= " + dt.ToString( " yyyy/MM/ddhh:mm:ss:fff " )) Debug.WriteLine( " dt.ToString(yyyy/MM/ddhh:mm:ss:fffff)= " + dt.ToString( " yyyy/MM/ddhh:mm:ss:fffff " )) Debug.WriteLine( " dt.ToString(yyyy/MM/ddhh:mm:ss:fffffff)= " + dt.ToString( " yyyy/MM/ddhh:mm:ss:fffffff " )) Debug.WriteLine( " dt.ToString(YYYY/MM/DDHH:MM:SS:FFF)= " + dt.ToString( " YYYY/MM/DDHH:MM:SS:FFF " )) Debug.WriteLine( " dt.ToString(yyyy/mm/ddhh:mm:ss:fff)= " + dt.ToString( " yyyy/mm/ddhh:mm:ss:fff " )) 结果如下: dt.ToString(yyyy / MM / ddhh:mm:ss:fff) = 2007 / 04 / 16 03 : 15 : 13 : 887 dt.ToString(yyyy / MM / ddhh:mm:ss:fffff) = 2007 / 04 / 16 03 : 15 : 13 : 88783 dt.ToString(yyyy / MM / ddhh:mm:ss:fffffff) = 2007 / 04 / 16 03 : 15 : 13 : 8878378 dt.ToString(YYYY / MM / DDHH:MM:SS:FFF) = YYYY / 04 / DD 15 : 04 :SS: 887 dt.ToString(yyyy / mm / ddhh:mm:ss:fff) = 2007 / 15 / 16 03 : 15 : 13 : 887 也可以用Format(Date,Format)进行转换
Dim
dt
As
DateTime
=
Now
Debug.WriteLine( Format (dt, " yyyy/MM/ddHH:mm:ss:fff " )) 结果如下: 2007 / 04 / 16 16 : 24 : 09 : 758 其他的日期型转换为字符型都可以先转换为Date型或者DateTime型,然后再通过ToString转换为字符型。 字符型转换为日期型最直接的方法就是解析日期字符串,取得年,月,日,时,分,秒,组织成日期形式【yyyy/MM/dd】或者【yyyy/MM /dd hh:mm:ss】,然后用CDate转换为日期型
Dim
strDate
As
String
=
"
20050101
"
Dim strTime As String = " 12:34:56 " Dim year As String = strDate.Substring( 0 , 4 ) Dim month As String = strDate.Substring( 4 , 2 ) Dim day As String = strDate.Substring( 6 , 2 ) Dim dt As Date = CDate ( year + " / " + month + " / " + day + " " + strTime) ' 组织 成yyyy/MM/ddhh:mm:ss格式 Dim dt2 As Date = CDate ( year + " / " + month + " / " + day ) Debug.WriteLine( " dt.ToString= " + dt.ToString) Debug.WriteLine( " dt2.ToString= " + dt2.ToString) 结果如下: dt.ToString = 2005 / 01 / 01 12 : 34 : 56 dt2.ToString = 2005 / 01 / 01 0 : 00 : 00 或者是用DateTime的构造函数,DateTime的构造函数有好多个
Dim
d
As
DateTime
=
"
4/13/200712:34:56.123456PM
"
Debug.WriteLine(d.ToString( " yyyy/MM/ddHH:mm:ss:fff " )) 执行结果: 2007 / 04 / 13 12 : 34 : 56 : 123 2.Double型和日期型之间的转换在一些数据库中保存日期的时候不是用日期型而是把日期转换成double型之后放入数据库,这样的情况下
Dim
dblTicks
As
Double
=
39188.7805780093
Dim dtime As DateTime = New DateTime(dblTicks * 24 * 3600 * 10000000 ) Debug.WriteLine( " dtime.ToString(yyyy/MM/ddHH:mm:ss:fff)= " + dtime.ToString( " yyyy/MM/ddHH:mm:ss:fff " )) 执行结果: dtime.ToString(yyyy / MM / ddHH:mm:ss:fff) = 0108 / 04 / 18 18 : 44 : 01 : 940 执行结果年日不正确,大概少了1900年,可能是因为从1899年12月30日开始计算的,要把计时开始的时间加上
Dim
dt
As
DateTime
=
New
DateTime(
"
1899
"
,
"
12
"
,
"
30
"
)
Debug.WriteLine(dt.Ticks.ToString) 执行结果: 599264352000000000 将上面的例子改写为下面的样子,结果就正确了
Dim
dblTicks
As
Double
=
39188.7805780093
Dim dtime As DateTime = New DateTime(dblTicks * 24 * 3600 * 10000000 + New DateTime( " 1899 " , " 30 " ).Ticks) Debug.WriteLine( " dtime.ToString(yyyy/MM/ddHH:mm:ss:fff)= " + dtime.ToString( " yyyy/MM/ddHH:mm:ss:fff " )) 执行结果: dtime.ToString(yyyy / MM / ddHH:mm:ss:fff) = 2007 / 04 / 16 18 : 44 : 01 : 940 这样的方法用起来肯定很麻烦,DateTime还有另外一个从Double转换为Date型的方法,FromOADate(double),这样子 就方便多了。当然,从日期型转换为Double型的话也很方便了,用Date.ToOaDate()就可以了.
Dim
dt
As
DateTime
=
DateTime.FromOADate(
39188.7805780093
)
Debug.WriteLine( Format (dt, " yyyy/MM/ddHH:mm:ss:fff " )) Debug.WriteLine( " dt.ToOADate.ToString= " + dt.ToOADate.ToString) 执行结果: 2007 / 04 / 16 18 : 44 : 01 : 940 dt.ToOADate.ToString = 39188.7805780093 3.Long型和日期型之间的转换Long型一般是表示为 Windows 文件时间的当前 DateTime 对象的值,它表示自协调通用时间 (UTC) 公元 (C.E.) 1601 年 1 月 1 日午夜 12:00 以来已经过的时间的以 100 毫微秒为间隔的间隔数。Windows 使用文件时间记录应用程序创建、访问或写入文件的时间。用Date.FromFileTime(long)方法。还有一个 FromFileTimeUtc(long)方法,是将当前文件时间转换为同时的UTC(协调通用时间)
Dim
l
As
Long
=
128208176211955002
Dim dt As DateTime = DateTime.FromFileTime( 128208176211955002 ) Dim dt2 As DateTime = DateTime.FromFileTimeUtc( 128208176211955002 ) Debug.WriteLine(dt.ToString) Debug.WriteLine(dt2.ToString) 执行结果: 2007 / 04 / 12 11 : 13 : 41 2007 / 04 / 12 2 : 13 : 41 现在这里是东9区,刚好时间上差了9小时 同样,日期型转换为Long型用Date.ToFileTime()方法。另外还有一个ToFileTimeUtc()方法,两者在指定Kind的 情况下是相同的,在没有指定Kind的情况下内容是不同的。
Dim
dt
As
DateTime
=
DateTime.FromFileTime(
128208176211955002
)
Debug.WriteLine( " DateTimeKind=Null " ) Debug.WriteLine(dt.ToFileTime.ToString) Debug.WriteLine(dt.ToFileTimeUtc().ToString) dt = DateTime.SpecifyKind(dt,DateTimeKind.Unspecified) Debug.WriteLine( " DateTimeKind=Unspecified " ) Debug.WriteLine(dt.ToFileTime.ToString) Debug.WriteLine(dt.ToFileTimeUtc().ToString) dt = DateTime.SpecifyKind(dt,DateTimeKind.Local) Debug.WriteLine( " DateTimeKind=Local " ) Debug.WriteLine(dt.ToFileTime.ToString) Debug.WriteLine(dt.ToFileTimeUtc().ToString) dt = DateTime.SpecifyKind(dt,DateTimeKind.Utc) Debug.WriteLine( " DateTimeKind=Utc " ) Debug.WriteLine(dt.ToFileTime.ToString) Debug.WriteLine(dt.ToFileTimeUtc().ToString) 执行结果: DateTimeKind = Null 128208176211955002 128208176211955002 DateTimeKind = Unspecified 128208176211955002 128208500211955002 DateTimeKind = Local 128208176211955002 128208176211955002 DateTimeKind = Utc 128208500211955002 128208500211955002 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |