简单生活 发表于 2015-1-18 11:27:49

ASP.NET教程之利用.NET Framework中新的日期工夫范例仓酷云

刚刚打开这篇专题,猛然见到HAL9000发表的《对于大型公司项目平台选择j2ee的几层认识》系列,深受启发。概述

写下本文缘于头几天博客园一名伴侣宣布了一篇.NET口试题的文章,个中一个关于DateTime的成绩引发了人人剧烈的争辩,鉴于日期工夫范例是人人开辟中会频仍利用的一其中数据范例,这里我们有需要来对.NETFramework中的日期工夫范例做一个深切的熟悉。
从.NETFramework1.0入手下手,就供应了DateTime范例来暗示一个日期工夫范例,它是一个布局范例,而且不成觉得空,这在必定水平上给我们在往数据库中保留数据时带来了很年夜的贫苦,由于我们晓得,在数据库中datatime范例是能够为Null的,为懂得决这个成绩,不能不常常利用DateTime.MinValue来暗示,但这并非我们想要的。侥幸的是到了.NETFramework2.0中,供应了可空范例,此时我们就能够利用Nullable<DateTime>来暗示一个日期工夫范例,它是能够为Null的,这给我们带来了极年夜的便利。
到了.NETFramework3.5中,又为我们供应了一个全新的日期工夫范例DateTimeOffset,它一般以相对格林威治工夫(GMT,GreenwichMeanTime)的日期和工夫来暗示,格林威治工夫又被称为国际尺度工夫UTC(UniversalTimeCode)。除此以外,在.NETFramework中还为我们供应了TimeZone类用来暗示时区,到了.NETFramework3.5中,对TimeZone类进一步加强,供应了TimeZoneInfo类来暗示天下上的任什么时候区。
在本文中,我们将对以上日期工夫范例、时区类举行具体的先容。
DateTime和DateTimeOffset

DateTime值范例暗示值局限在公元0001年1月1日半夜12:00:00到公元9999年12月31日早晨11:59:59之间的日期和工夫;DateTimeOffset包括一个DateTime值和一个名为Offset属性,该属性用于断定以后DateTimeOffset实例的日期和工夫与UTC之间的差值,我们先来看一下这段代码的输入:
1:staticvoidMain(string[]args)2:{3:Console.WriteLine(DateTime.Now);4:Console.WriteLine(DateTimeOffset.Now);5:}输入了局为:

<br>
能够看到,DateTime输入了日期和工夫,DateTimeOffset范例不但输入了日期和工夫,还给出以后工夫与UTC之间的差值。接上去我们再看一段代码,怎样手工机关一个DateTime和DateTimeOffset实例:
1:staticvoidMain(string[]args)2:{3:DateTimedateA=newDateTime(2008,8,26,23,1,48);4:DateTimeOffsetdateB=newDateTimeOffset(2008,8,26,23,1,48,5:newTimeSpan(4,0,0));2:{02:{12:{22:{3输入了局以下图所示:

<br>

转换DateTime为DateTimeOffset

经由过程下面的两个例子,人人应当对DateTimeOffset有了一个基础的熟悉,DateTimeOffset供应了比DateTime更高水平的时区辨认才能,接上去我们看怎样在DateTime和DateTimeOffset之间举行转换,入手下手之前我们先懂得一下DateTimeKind列举,在DateTime中供应了一个名为Kind的属性,它用来唆使DateTime对象是暗示当地工夫、国际尺度工夫(UTC),仍是既不指定为当地工夫,也不指定为国际尺度工夫(UTC),DateTimeKind的界说以下:
2:{42:{2:{62:{72:{82:{9关于UTC和当地DateTime值,失掉的DateTimeOffset值的Offset属性正确反应UTC或当地时区偏移量,以下面的代码将UTC工夫转换为与之等效的DateTimeOffset值:
1:staticvoidMain(string[]args)2:{3:Console.WriteLine(DateTime.Now);23:Console.WriteLine(DateTime.Now);33:Console.WriteLine(DateTime.Now);43:Console.WriteLine(DateTime.Now);53:Console.WriteLine(DateTime.Now);62:{23:Console.WriteLine(DateTime.Now);83:Console.WriteLine(DateTime.Now);9输入了局以下图所示:
<br>
再来写一个暗示当地工夫的转换,以下代码所示:
1:staticvoidMain(string[]args)2:{4:Console.WriteLine(DateTimeOffset.Now);24:Console.WriteLine(DateTimeOffset.Now);33:Console.WriteLine(DateTime.Now);43:Console.WriteLine(DateTime.Now);53:Console.WriteLine(DateTime.Now);62:{23:Console.WriteLine(DateTime.Now);83:Console.WriteLine(DateTime.Now);9输入了局以下图所示:

<br>
假如在转换时指定的工夫是Unspecified,转换后发生的DateTimeOffset的值的偏移量将会为当地时区,以下代码所示:
1:staticvoidMain(string[]args)2:{4:Console.WriteLine(DateTimeOffset.Now);25:}33:Console.WriteLine(DateTime.Now);43:Console.WriteLine(DateTime.Now);53:Console.WriteLine(DateTime.Now);62:{23:Console.WriteLine(DateTime.Now);83:Console.WriteLine(DateTime.Now);9输入了局以下图所示,能够看到它发生的输入是当地时区:

<br>
这一点实在从DateTimeOffset的一个参数为DateTime的机关函数中就可以够看出来,它只判别DateTime是不是为UTC,不然就取以后当地时区的偏移量:
1:staticvoidMain(string[]args)01:staticvoidMain(string[]args)11:staticvoidMain(string[]args)21:staticvoidMain(string[]args)31:staticvoidMain(string[]args)42:{91:staticvoidMain(string[]args)61:staticvoidMain(string[]args)72:{31:staticvoidMain(string[]args)92:{02:{1转换DateTimeOffset为DateTime

在转换一个DateTimeOffset范例为DateTime范例时,可使用以下几个属性:
DateTime属性:前往一个唆使为Unspecified的DateTime值;
UtcDateTime属性:前往一个唆使为UTC的DateTime值,假如偏移量不为0,它会转换为UTC工夫;
LocalDateTime属性:前往一个唆使为Local的DateTime值。
这三个属性的在DateTimeOffset中的界说以下代码所示:
2:{22:{32:{42:{55:}2:{02:{82:{93:DateTimedateA=newDateTime(2008,8,26,23,1,48);03:Console.WriteLine(DateTime.Now);93:DateTimedateA=newDateTime(2008,8,26,23,1,48);23:DateTimedateA=newDateTime(2008,8,26,23,1,48);33:DateTimedateA=newDateTime(2008,8,26,23,1,48);43:DateTimedateA=newDateTime(2008,8,26,23,1,48);53:DateTimedateA=newDateTime(2008,8,26,23,1,48);63:DateTimedateA=newDateTime(2008,8,26,23,1,48);73:DateTimedateA=newDateTime(2008,8,26,23,1,48);8能够看到,在LocalDateTime属性中起首会猎取UtcDateTime,然后挪用ToLocalTime()将其转换为当地工夫。我们如今来看一组测试代码:
1:staticvoidMain(string[]args)2:{4:DateTimeOffsetdateB=newDateTimeOffset(2008,8,26,23,1,48,14:DateTimeOffsetdateB=newDateTimeOffset(2008,8,26,23,1,48,23:Console.WriteLine(DateTime.Now);44:DateTimeOffsetdateB=newDateTimeOffset(2008,8,26,23,1,48,44:DateTimeOffsetdateB=newDateTimeOffset(2008,8,26,23,1,48,54:DateTimeOffsetdateB=newDateTimeOffset(2008,8,26,23,1,48,64:DateTimeOffsetdateB=newDateTimeOffset(2008,8,26,23,1,48,74:DateTimeOffsetdateB=newDateTimeOffset(2008,8,26,23,1,48,84:DateTimeOffsetdateB=newDateTimeOffset(2008,8,26,23,1,48,95:newTimeSpan(4,0,0));05:newTimeSpan(4,0,0));15:newTimeSpan(4,0,0));25:newTimeSpan(4,0,0));3最初输入的了局以下图所示:

<br>
在DateTime和DateTimeOffset之间选择

下面说了这么多关于DateTime和DateTimeOffset范例,怎样在DateTime和DateTimeOffset之间举行选择呢?夙昔面的示例中人人已看到了,DateTime只能够暗示UTC大概当地时区的工夫,大概不断定的时区,这给我们使用程序的移植带来了极年夜的贫苦,除非你指定它暗示的是UTC,不然在移植使用程序时会遭到诸多的限定,比方上面这段最复杂的代码:
1:staticvoidMain(string[]args)2:{5:newTimeSpan(4,0,0));65:newTimeSpan(4,0,0));75:newTimeSpan(4,0,0));82:{9假如DateTime暗示当地时区,那末使用程序在当地时区内移植是不会有成绩的。可是假如你的使用程序必要对分歧的时区都撑持,倡议在利用时只管将DateTime的Kind属性设置为Utc,这一点特别主要,不然就必要思索利用DateTimeOffset范例。
与DateTime范例分歧的是,DateTimeOffset它独一的标识了一个明白的工夫点,立即间值和相对UTC的偏移量,它其实不依附于某个特定的时区,在年夜多半情形下,应该思索利用DateTimeOffset来取代DateTime范例。而且在SQLServer2008中也已供应了关于DateTimeOffset数据范例的撑持,具体信息能够参考这篇文章《SQLServer2008中的新日期数据范例》。
可是DateTimeOffset范例并非完整用来取代DateTime范例,在使用程序只用到日期而不触及工夫,如出身日期,用DateTime范例是没有任何成绩的。
时区撑持

在.NETFramework3.5之前,我们只能利用TimeZone来暗示一个时区,可是Timezone功效很无限,它只能辨认当地时区,能够在UTC和当地工夫之间转换工夫;而TimeZoneInfo对TimeZone举行了很年夜的加强,它能够暗示天下上的恣意时区。看上面一段代码:
1:staticvoidMain(string[]args)2:{2:{022:{033:Console.WriteLine(DateTime.Now);42:{052:{062:{072:{082:{093:DateTimedateA=newDateTime(2008,8,26,23,1,48);2输入了局以下图所示:

<br>
TimeZone供应的属性和办法十分无限,TimeZoneInfo在这方面就显的十分丰厚,我们可使用TimeZoneInfo在两个分歧的时区之间转换工夫,以下面的代码:
1:staticvoidMain(string[]args)2:{2:{132:{142:{152:{163:Console.WriteLine(DateTime.Now);62:{182:{193:Console.WriteLine(DateTime.Now);9输入了局以下图所示:

<br>
这里利用FindSystemTimeZoneById办法来依据ID来猎取时区。在推出TimeZoneInfo以后,在今后的开辟中完整能够保持TimeZone类了,TimeZoneInfo已完整包括了它。
总结

本文先容了.NETFramework中关于日期工夫范例的撑持,但愿对人人有所匡助。
本文来自:http://www.dotneteye.cn/post/2008/08/30/using-NET-Frameworke-new-datetime-data-type.aspx
其实net网页编程之所以在曾经独步天下,就是因为他的跨平台、安全性,这两方面,效率可不是net网页编程的强项,反而是他最短的一块挡板,虽然net总是用理论证明比.NET快。

若天明 发表于 2015-1-20 19:16:09

ASP在执行的时候,是由IIS调用程序引擎,解释执行嵌在HTML中的ASP代码,最终将结果和原来的HTML一同送往客户端。

冷月葬花魂 发表于 2015-1-29 16:01:36

CGI程序在运行的时候,首先是客户向服务器上的CGI程序发送一个请求,服务器接收到客户的请求后,就会打开一个新的Process(进程)来执行CGI程序,处理客户的请求。CGI程序最后将执行的结果(HTML页面代码)传回给客户。

简单生活 发表于 2015-2-6 02:42:25

ASP在执行的时候,是由IIS调用程序引擎,解释执行嵌在HTML中的ASP代码,最终将结果和原来的HTML一同送往客户端。

爱飞 发表于 2015-2-6 03:14:41

是指转换后的Servlet程序代码的行数。这给调试代码带来一定困难。所以,在排除错误时,可以采取分段排除的方法(在可能出错的代码前后输出一些字符串,用字符串是否被输出来确定代码段从哪里开始出错)。

飘灵儿 发表于 2015-2-15 08:43:55

平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。

若相依 发表于 2015-2-25 04:46:18

提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。

深爱那片海 发表于 2015-3-4 11:22:33

可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。

愤怒的大鸟 发表于 2015-3-10 21:24:36

提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。

因胸联盟 发表于 2015-3-13 04:08:14

是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。

金色的骷髅 发表于 2015-3-20 11:45:37

弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。

老尸 发表于 2015-4-10 11:59:32

ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。
页: [1]
查看完整版本: ASP.NET教程之利用.NET Framework中新的日期工夫范例仓酷云