VB.NET中的日期时间转换
http://blog.csdn.net/tyouvivi/article/details/1567731 刚刚学习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 dt.ToFileTime 128211774217140929 dt.ToFileTimeUtc dt.ToLocalTime dt.ToOADate 39188.6321957639 dt.ToUniversalTime 6 dt.ToString dt.ToString(yyyy MM ddhh:mm:ss:fff) 03 714 用dt.ToString("yyyy/MM/dd hh:mm:ss:fff")是最方便的,可以转换为任意一种想要的字符串。 dt.ToString(yyyy
13
884
ddHH:mm:ss:fff)
884
特别值得注意的是月【MM】和分【mm】,如果两者写错了很难发现。大小写需要注意的地方: 年
Year
yyyy小写固定
月 Month MM大写固定 日 Day dd小写固定 时 Hour HH或者hh大小写均可 分 Minute mm小写固定 秒 Second ss小写固定 毫秒Millisecondff或者FF大小写均可(最大7位) DateTime
))
Debug.WriteLine( dt.ToString(yyyy/MM/ddhh:mm:ss:fffff)= yyyy/MM/ddhh:mm:ss:fffff dt.ToString(yyyy/MM/ddhh:mm:ss:fffffff)= yyyy/MM/ddhh:mm:ss:fffffff dt.ToString(YYYY/MM/DDHH:MM:SS:FFF)= YYYY/MM/DDHH:MM:SS:FFF dt.ToString(yyyy/mm/ddhh:mm:ss:fff)= yyyy/mm/ddhh:mm:ss:fff )) 结果如下: dt.ToString(yyyy 887 ddhh:mm:ss:fffff) 88783 ddhh:mm:ss:fffffff) 8878378 dt.ToString(YYYY DDHH:MM:SS:FFF) YYYY DD :SS: mm 也可以用Format(Date,Format)进行转换 Format
(dt,
yyyy/MM/ddHH:mm:ss:fff
))
结果如下: 24 09 758 其他的日期型转换为字符型都可以先转换为Date型或者DateTime型,然后再通过ToString转换为字符型。 字符型转换为日期型最直接的方法就是解析日期字符串,取得年,月,日,时,分,秒,组织成日期形式【yyyy/MM/dd】或者【yyyy/MM/dd hh:mm:ss】,然后用CDate转换为日期型 strDate
String
20050101
strTime 12:34:56 year strDate.Substring( 0 ,0)">4 ) month 2 day CDate ( strTime) ' 组织成yyyy/MM/ddhh:mm:ss格式 dt2 ) Debug.WriteLine( dt2.ToString= dt2.ToString) 结果如下: dt.ToString 2005 01 12 34 56 dt2.ToString 00 00 或者是用DateTime的构造函数,DateTime的构造函数有好多个
还有就是直接定义一个日期型的变量,不过要注意必须是一下格式【MM/dd/yyyy HH:mm:ss.fffffff】,其中【MM/dd/yyyy】是必须项目
d
4/13/200712:34:56.123456PM
Debug.WriteLine(d.ToString( )) 执行结果: 123 2.Double型和日期型之间的转换 在一些数据库中保存日期的时候不是用日期型而是把日期转换成double型之后放入数据库,这样的情况下 dblTicks
Double
39188.7805780093
dtime
New
DateTime(dblTicks
*
3600
10000000
dtime.ToString(yyyy/MM/ddHH:mm:ss:fff)=
dtime.ToString(
))
执行结果: dtime.ToString(yyyy 0108 18 44 940 执行结果年日不正确,大概少了1900年,可能是因为从1899年12月30日开始计算的,要把计时开始的时间加上 DateTime(
1899
30
)
Debug.WriteLine(dt.Ticks.ToString) 执行结果: 599264352000000000 将上面的例子改写为下面的样子,结果就正确了 ).Ticks) Debug.WriteLine( 这样的方法用起来肯定很麻烦,DateTime还有另外一个从Double转换为Date型的方法,FromOADate(double),这样子就方便多了。当然,从日期型转换为Double型的话也很方便了,用Date.ToOaDate()就可以了. DateTime.FromOADate(
dt.ToOADate.ToString=
dt.ToOADate.ToString)
执行结果: 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(协调通用时间) l
Long
128208176211955002
DateTime.FromFileTime(
DateTime.FromFileTimeUtc(
)
Debug.WriteLine(dt.ToString) Debug.WriteLine(dt2.ToString) 执行结果: 11 41 现在这里是东9区,刚好时间上差了9小时 同样,日期型转换为Long型用Date.ToFileTime()方法。另外还有一个ToFileTimeUtc()方法,两者在指定Kind的情况下是相同的,在没有指定Kind的情况下内容是不同的。 DateTimeKind=Null
) Debug.WriteLine(dt.ToFileTime.ToString) Debug.WriteLine(dt.ToFileTimeUtc().ToString) dt DateTime.SpecifyKind(dt,DateTimeKind.Unspecified) Debug.WriteLine( DateTimeKind=Unspecified DateTimeKind=Local DateTimeKind=Utc ) Debug.WriteLine(dt.ToFileTime.ToString) Debug.WriteLine(dt.ToFileTimeUtc().ToString) 执行结果: DateTimeKind Null DateTimeKind Unspecified 128208500211955002 Local Utc 128208500211955002 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |