仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1882|回复: 11
打印 上一主题 下一主题

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

[复制链接]
简单生活 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:27:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
刚刚打开这篇专题,猛然见到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. 1:staticvoidMain(string[]args)
复制代码
  1. 2:{
复制代码
  1. 3:Console.WriteLine(DateTime.Now);
复制代码
  1. 4:Console.WriteLine(DateTimeOffset.Now);
复制代码
  1. 5:}
复制代码
输入了局为:

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

<br>

转换DateTime为DateTimeOffset

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

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

<br>
这一点实在从DateTimeOffset的一个参数为DateTime的机关函数中就可以够看出来,它只判别DateTime是不是为UTC,不然就取以后当地时区的偏移量:
  1. 1:staticvoidMain(string[]args)0
复制代码
  1. 1:staticvoidMain(string[]args)1
复制代码
  1. 1:staticvoidMain(string[]args)2
复制代码
  1. 1:staticvoidMain(string[]args)3
复制代码
  1. 1:staticvoidMain(string[]args)4
复制代码
  1. 2:{9
复制代码
  1. 1:staticvoidMain(string[]args)6
复制代码
  1. 1:staticvoidMain(string[]args)7
复制代码
  1. 2:{3
复制代码
  1. 1:staticvoidMain(string[]args)9
复制代码
  1. 2:{0
复制代码
  1. 2:{1
复制代码
转换DateTimeOffset为DateTime

在转换一个DateTimeOffset范例为DateTime范例时,可使用以下几个属性:
DateTime属性:前往一个唆使为Unspecified的DateTime值;
UtcDateTime属性:前往一个唆使为UTC的DateTime值,假如偏移量不为0,它会转换为UTC工夫;
LocalDateTime属性:前往一个唆使为Local的DateTime值。
这三个属性的在DateTimeOffset中的界说以下代码所示:
  1. 2:{2
复制代码
  1. 2:{3
复制代码
  1. 2:{4
复制代码
  1. 2:{5
复制代码
  1. 5:}
复制代码
  1. 2:{0
复制代码
  1. 2:{8
复制代码
  1. 2:{9
复制代码
  1. 3:DateTimedateA=newDateTime(2008,8,26,23,1,48);0
复制代码
  1. 3:Console.WriteLine(DateTime.Now);9
复制代码
  1. 3:DateTimedateA=newDateTime(2008,8,26,23,1,48);2
复制代码
  1. 3:DateTimedateA=newDateTime(2008,8,26,23,1,48);3
复制代码
  1. 3:DateTimedateA=newDateTime(2008,8,26,23,1,48);4
复制代码
  1. 3:DateTimedateA=newDateTime(2008,8,26,23,1,48);5
复制代码
  1. 3:DateTimedateA=newDateTime(2008,8,26,23,1,48);6
复制代码
  1. 3:DateTimedateA=newDateTime(2008,8,26,23,1,48);7
复制代码
  1. 3:DateTimedateA=newDateTime(2008,8,26,23,1,48);8
复制代码
能够看到,在LocalDateTime属性中起首会猎取UtcDateTime,然后挪用ToLocalTime()将其转换为当地工夫。我们如今来看一组测试代码:
  1. 1:staticvoidMain(string[]args)
复制代码
  1. 2:{
复制代码
  1. 4:DateTimeOffsetdateB=newDateTimeOffset(2008,8,26,23,1,48,1
复制代码
  1. 4:DateTimeOffsetdateB=newDateTimeOffset(2008,8,26,23,1,48,2
复制代码
  1. 3:Console.WriteLine(DateTime.Now);4
复制代码
  1. 4:DateTimeOffsetdateB=newDateTimeOffset(2008,8,26,23,1,48,4
复制代码
  1. 4:DateTimeOffsetdateB=newDateTimeOffset(2008,8,26,23,1,48,5
复制代码
  1. 4:DateTimeOffsetdateB=newDateTimeOffset(2008,8,26,23,1,48,6
复制代码
  1. 4:DateTimeOffsetdateB=newDateTimeOffset(2008,8,26,23,1,48,7
复制代码
  1. 4:DateTimeOffsetdateB=newDateTimeOffset(2008,8,26,23,1,48,8
复制代码
  1. 4:DateTimeOffsetdateB=newDateTimeOffset(2008,8,26,23,1,48,9
复制代码
  1. 5:newTimeSpan(4,0,0));0
复制代码
  1. 5:newTimeSpan(4,0,0));1
复制代码
  1. 5:newTimeSpan(4,0,0));2
复制代码
  1. 5:newTimeSpan(4,0,0));3
复制代码
最初输入的了局以下图所示:

<br>
在DateTime和DateTimeOffset之间选择

下面说了这么多关于DateTime和DateTimeOffset范例,怎样在DateTime和DateTimeOffset之间举行选择呢?夙昔面的示例中人人已看到了,DateTime只能够暗示UTC大概当地时区的工夫,大概不断定的时区,这给我们使用程序的移植带来了极年夜的贫苦,除非你指定它暗示的是UTC,不然在移植使用程序时会遭到诸多的限定,比方上面这段最复杂的代码:
  1. 1:staticvoidMain(string[]args)
复制代码
  1. 2:{
复制代码
  1. 5:newTimeSpan(4,0,0));6
复制代码
  1. 5:newTimeSpan(4,0,0));7
复制代码
  1. 5:newTimeSpan(4,0,0));8
复制代码
  1. 2:{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. 1:staticvoidMain(string[]args)
复制代码
  1. 2:{
复制代码
  1. 2:{02
复制代码
  1. 2:{03
复制代码
  1. 3:Console.WriteLine(DateTime.Now);4
复制代码
  1. 2:{05
复制代码
  1. 2:{06
复制代码
  1. 2:{07
复制代码
  1. 2:{08
复制代码
  1. 2:{09
复制代码
  1. 3:DateTimedateA=newDateTime(2008,8,26,23,1,48);2
复制代码
输入了局以下图所示:

<br>
TimeZone供应的属性和办法十分无限,TimeZoneInfo在这方面就显的十分丰厚,我们可使用TimeZoneInfo在两个分歧的时区之间转换工夫,以下面的代码:
  1. 1:staticvoidMain(string[]args)
复制代码
  1. 2:{
复制代码
  1. 2:{13
复制代码
  1. 2:{14
复制代码
  1. 2:{15
复制代码
  1. 2:{16
复制代码
  1. 3:Console.WriteLine(DateTime.Now);6
复制代码
  1. 2:{18
复制代码
  1. 2:{19
复制代码
  1. 3: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一同送往客户端。
爱飞 该用户已被删除
5#
发表于 2015-2-6 03:14:41 | 只看该作者
是指转换后的Servlet程序代码的行数。这给调试代码带来一定困难。所以,在排除错误时,可以采取分段排除的方法(在可能出错的代码前后输出一些字符串,用字符串是否被输出来确定代码段从哪里开始出错)。
飘灵儿 该用户已被删除
6#
发表于 2015-2-15 08:43:55 | 只看该作者
平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。
若相依 该用户已被删除
7#
发表于 2015-2-25 04:46:18 | 只看该作者
提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。
深爱那片海 该用户已被删除
8#
发表于 2015-3-4 11:22:33 | 只看该作者
可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。
愤怒的大鸟 该用户已被删除
9#
发表于 2015-3-10 21:24:36 | 只看该作者
提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。
因胸联盟 该用户已被删除
10#
发表于 2015-3-13 04:08:14 | 只看该作者
是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。
金色的骷髅 该用户已被删除
11#
发表于 2015-3-20 11:45:37 | 只看该作者
弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。
老尸 该用户已被删除
12#
发表于 2015-4-10 11:59:32 | 只看该作者
ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-20 09:22

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表