《C#教学课件:第9章 字符串与时间》由会员分享,可在线阅读,更多相关《C#教学课件:第9章 字符串与时间(52页珍藏版)》请在金锄头文库上搜索。
1、字符串与时间1内容简介 1.String类2.StringBuilder类3.正则表达式4.日期和时间处理21.31.41 字符串1.21.1 字符串是C#编程语言中最常用到的数据类型,很多操作都需要使用字符串来完成。String类的构造函数比较字符串提取字符串拆分字符串1.5定位与查找字符串1.6格式化字符串1.7String类中的其它常用方法31.1 String类的构造函数 字符串是Unicode字符的有序集合,用于表示文本。String对象是System.Char对象的有序集合。System.String是一个类,专门用于存储字符串,它允许对字符串进行多种操作。 String类的3种构
2、造函数,分别按不同的方式对字符串进行初始化:名称名称说明说明String(Char)将String类新实例初始化为由Unicode字符数组指示的值String(Char,Int32)将String类的新实例初始化为由重复指定次数的指定Unicode字符指示的值String(Char,Int32,Int32)将String类的新实例初始化为由Unicode字符数组、该数组内的起始字符位置和一个长度指示的值4例例: : 声明一个字符数组和字符串,然后再声明4个String类的对象,分别为str0、str1、str2和str3。static void Main(string args) char c
3、harSet = 计,算,机,软,件; string str = 好好学习天天向上;string str0 = str;string str1 = new string(charSet); /获取由charStr字符数组指示的值string str3 = new string(F,6); /获取字符F,并且将字符F重复6次string str2 = new string(charSet, 2, 3); /获取charStr字符数组中从2开始的3个字符56u + 运算符用于连接字符串。例: string a = good + morning; 这将创建一个包含“good morning”的字符串
4、对象。u字符串是不可变的,即:字符串对象在创建后,尽管从语法上看您似乎可以更改其内容,但事实上并不可行。例如下面的代码,编译器实际上会创建一个新字符串对象来保存新的字符序列,且新对象将赋给 b。然后字符串“he”将适宜于垃圾回收。string b = he; b += llo; u 相等运算符(= 和 !=)是为了比较 string 对象(而不是引用)的值。这使得对字符串相等性的测试更为直观。例如:string a = hello; string b = he; b += “llo;Console.WriteLine(a = b); Console.WriteLine(object)a = (
5、object)b); 这将先显示“True”,然后显示“False”,因为字符串的内容是相同的,但是 a 和 b 引用的不是同一个字符串实例。7u 运算符可以用于对 string 的各个字符的只读访问。例:string str = test; char x = str2; / x = s; 对str2赋值会引起编译错误u字符串文本可包含任何字符。包括转义序列。以反斜线“”开头,后跟一个或几个字符,具有特定含义。如n表示换行消除紧随其后的字符的原有含义,故称“转义”字符。主要用来表示那些用一般字符不便于表示的控制代码、不可见的字符8转义序列转义序列 字符名称字符名称Unicode 编码编码单引号
6、0x0027双引号0x0022反斜杠0x005C0Null0x0000a警报0x0007bBackspace0x0008n换行0x000Ar回车0x000Dt水平制表符0x0009uUnicode 转义序列u0041 = A字符串转义序列字符串转义序列u转义序列 表示反斜杠, u0066 表示字母 f。String a = u0066; Console.WriteLine(a); / 输出结果: f9原义字符串以 开头并且也用双引号引起来。优势在于不处理转义序列,因此很容易写入,例如完全限定的文件名就是原义字符串:c:DocsSourcea.txt 等效于: c:DocsSourcea.txt
7、 1.2 比较字符串 比较字符串是根据字符串中的字母顺序来处理的。可以使用“=”符号比较两个字符串是否相等,也可以使用String提供的方法进行比较。 Compare()方法和CompareTo()方法都可以用来比较字符串,但是比较方式不同。Compare方法方法是String类的静态方法,包括6种重载方法。CompareTo不是静态方法,可以通过一个String对象调用。str1.CompareTo(str2);1.Compare().Compare()方法和方法和CompareTo()CompareTo()方法方法string.Compare(str1 , str2); Compare()
8、和CompareTo()的返回值类型都是int,有3种情况:l当str1str2时,返回1l当str1=str2时,返回0l当str1str2时,返回-11011nCompare()的重载:Compare( str1,str2)Compare(str1,str2,boolean)Compare(str1,index1,str2,index2,length)Compare(str1,index1,str2,index2,length,boolean) boolean表示是否忽略比较字符的大小写。 index1和index2表示整数偏移量, length表示要比较的字符的数量static void
9、 Main(string args) string str0 = 好好学习天天向上; string str1 = 我学习英语OK ; string str2 = “我学习英语ok ; Console.WriteLine(string.Compare(str0, str1); Console.WriteLine(string.Compare(str0,2, str1,1,2); Console.WriteLine(string.Compare(str1, str2, false); Console.Read();2.Equals().Equals() =和Equals都可以用来比较字符串的值是否
10、相等。返回值是bool类型。如果相等返回true,否则返回false。例:例:使用Equals()方法判断用户输入的用户名和密码是否相等。if (username.Equals(userpass) & username = userpass) Console.WriteLine(恭喜您,登录信息成功!);else Console.WriteLine(很抱歉,您的用户名和密码有误);123.Contains().Contains() String.Contains()方法用于确定某个字符串中是否包含另一个字符串,该方法返回一个bool类型,如果包含则返回true,否则返回false。此方法区分大
11、小写,从字符串的第一个字符位置开始,一直搜索到最后一个字符位置。例:例:声明并初始化两个字符串变量myColor和color,然后使用Contains()方法判断myColor变量中是否包含color变量的内容。string myColor = “我最喜欢的颜色是红色、绿色和白色。”;string color = 白色;if (myColor.Contains(color) Console.WriteLine(返回结果为true);else Console.WriteLine(返回结果为false);131.3 提取字符串 提取字符串是指从字符串中获取指定的字符串。string hobby =
12、 My name is Lily 假设只想得到字符串“Lily”,这时候需要用到String类中的Substring()方法。该方法有两个重载:lString.Substring(int index1) 从指定位置开始返回要提取的字符串lString.Substring(int index1,int length) 第一个参数指定子字符串开始提取的位置;第二个参数指定字符串中的字符数 static void Main(string args) string mysub = 柏拉图说:人生短短几十年,不要给自己留下了什么遗憾 人生的苦闷有二,一是没有被满足,二是它得到了满足。; string s
13、ub1 = mysub.Substring(5); String sub2 = mysub.Substring(7, 5); Console.WriteLine(整段文字是: + mysub+n); Console.WriteLine(提取的第一句话是: + sub1+n); Console.WriteLine(提取的第二句话是: + sub2); Console.ReadLine(); 141.4 拆分字符串 拆分字符串是指一个字符串被指定的分隔字符或字符串分隔为多个字符串,返回由子字符串组成的字符串数组。实现拆分字符串的功能需要使用String类的Split()方法,该方法有多种重载形式:
14、lstring Split(char separator)lstring Split(char separator,int count)lstring Split(char separator,StringSplitOptions options)lstring Split(char separator,int count,StringSplitOptions options)lstring Split(string separator,StringSplitOptions options)lstring Split(string separator,int count,StringSplit
15、Options options) separator参数表示分隔字符或字符串数组;count表示要返回的字符串的最大数量;options表示字符串分隔选项,是一个枚举类型,主要有两个值:lSystem.StringSplitOptions.RemoveEmptyEntries 省略返回数组中的空元素lSystem.StringSplitOptions.None 要包含返回的数组中的空元素1516 例:例:mysub存储四大名著的名称(含空格),中间用逗号分隔。用Split()方法拆分: string mysub = 三 国 演 义,水 浒 传, 红 楼 梦,西 游 记; string suba
16、rray = mysub.Split(,); foreach (string sub in subarray) Console.WriteLine(sub); string subchar = sub.Split( ); foreach (string item in subchar) Console.Write(item); Console.WriteLine(); Console.Read();string mysub = 三 国 演 义,第二水 浒 传,红 楼 梦,西 游 记;string sep = , ;string subarray = mysub.Split(sep, Syste
17、m.StringSplitOptions.None);foreach (string sub in subarray) Console.WriteLine(sub); 1.5 定位与查找字符串 定位与查找字符串是指从字符串中查找指定的字符或字符串。方法方法说明说明IndexOf()返回指定字符或字符串第一次出现的索引位置(从0开始计算)。如果没有找到,则返回-1IndexOfAny()返回字符数组中元素第一次出现的索引位置LastIndexOf()返回指定字符或字符串的最后一个索引位置。LastIndexOfAny() 返回字符数组中元素最后出现的一个位置。StartsWith()判断字符串是
18、否以指定子字符串开始,返回true或falseEndsWith()判断字符串是否以指定子字符串结束,返回true或falsestring str = 我喜欢看的是那些伟大的著作;Console.WriteLine(的第一次出现的位置: + str.IndexOf(的);Console.WriteLine(那些最后出现的位置是: + str.LastIndexOf(那些);Console.WriteLine(是否以著作结尾 + str.EndsWith(著作); 171.6 格式化字符串 格式化字符串是指将字符、数字或日期等转化为指定格式的字符串。主要使用Format()方法,它是String类
19、的静态方法。多种重载形式:lstring Format(string format, object arg0) 将指定字符串中的一个或多个格式项替换为对象arg0的字符串表示形式lstring Format(string format, params object args) 将数组中的对象格式化为format表示的形式lstring Format(string format, object arg0,object arg1) 将指定的对象arg0和arg1格式化为format表示的形式lstring Format(string format, object arg0,object arg1,
20、object arg2) 将指定的对象arg0、arg1和arg2格式化为format表示的形式 string s1 = 北京; string s2=上海; String s = string.Format(两个城市是:0和1, s1, s2);18 string s0 = 北京,上海,广州; String s = string.Format(城市名是:012, s0); Format()方法除了可以格式化字符串外,还可以格式化日期和时间。.NET Framework提供了一种被称为“标准日期和时间格式字符串”的格式字符串。常用的日期和时间格式化说明符主要包括8类:ld 短日期模式,2010/
21、10/1lD 长日期模式, 2010年10月1日lf 长日期和短时间模式的组合,由空格分隔lF 长日期和长时间模式的组合,由空格分隔lM或m 月日模式lt 短时间模式,“HH:mm”lT 长时间模式,“HH:mm:ss”lY或y 年月模式 日期和时间的格式化日期和时间的格式化19 DateTime now = DateTime.Now; Console.WriteLine(now); Console.WriteLine(); string ss = String.Format(0:d, now);/短日期 Console.WriteLine(ss); ss = String.Format(0:
22、D, now); /长日期 Console.WriteLine(ss); ss = String.Format(0:m, now);/月日模式(M) Console.WriteLine(ss); ss = String.Format(0:y, now);/年月模式(Y) Console.WriteLine(ss); ss = String.Format(0:t, now);/短时间 Console.WriteLine(ss); ss = String.Format(0:T, now); /长时间 Console.WriteLine(ss); ss = String.Format(0:f, no
23、w); /长日期短时间 Console.WriteLine(ss); ss = String.Format(0:F, now); /长日期长时间 Console.WriteLine(ss);20 使用Format()方法除了可以格式化字符串和日期外,还可以格式化数字。常用的数字格式化说明符主要包括8类:lC或c 将数字转换为表示货币金额的字符串lD或d 将整数数字转换为十进制数字的字符串lE或e 将数字转换为科学计数法的字符串,即-d.dddE+ddd或-d.ddde+ddd形式lF或f 将数字转换为表示浮点数的字符串,即-ddd.ddd形式lG或g 根据数字类型以及是否存在精度说明符,数字会
24、转换为定点或科学计数法的最紧凑形式lN或n 用逗号分割千位的数字,比如1234将会被变成1,234lP或p 将数字转换为表示百分比的字符串lX或x 将整数数字转换为十六进制数字的字符串数字格式化数字格式化21double d = 32.5 ;Console.WriteLine(C格式0:c, d);Console.WriteLine(E格式0:e,d);1.7 String类中的其它常用方法string intro = “Hello,My name is Jim Green,Im a student.;string upper = intro.ToUpper();Console.WriteLi
25、ne(“原句为:0”, intro);Console.WriteLine(全部转换为大写:0, upper);Console.WriteLine(全部转换为小写:0”, intro.ToLower(); String类中还有一些常用的方法,例如ToUpper()、ToLower()、Copy()、CopyTo()、Replace()、Trim()、Contact()以及Join()等等。 1.ToUpper()1.ToUpper()方法和方法和ToLower()ToLower()方法方法 ToUpper()方法表示将字符串全部转换为大写;ToLower()方法表示将字符串全部转换为小写。221
26、.7 String类中的其它常用方法 string oldStr = 我十分高兴!; char charArray = 晴, 朗, 的, 一, 天 ; Console.Write(原始字符串是: + oldStr+rn原始字符数组是:); foreach (char c in charArray) Console.Write(c); Console.WriteLine(); string newStr = String.Copy(oldStr); Console.WriteLine(Copy的结果:+newStr); oldStr.CopyTo(2, charArray, 1,3); Cons
27、ole.Write(CopyTo的结果:); foreach (char c in charArray) Console.Write(c); 2.Copy()2.Copy()方法和方法和CopyTo()CopyTo()方法方法Copy() 将一个字符串的内容完整的复制到一个新的字符串中,在此过程中,会创建一个与指定的String类具有相同值的String类的新实例CopyTo() 从字符串中复制指定数量的字符到另外一个字符数组。 SourceString.CopyTo (SourceStart, DestCharArray, DestStart, count)23string oldstr =
28、 人们都说我的生活好快乐,我也认为自己真的快乐。;string newstr = oldstr.Replace(快乐,happy);Console.WriteLine(替换前的句子: + oldstr);Console.WriteLine(替换后的句子: + newstr); 3.Replace()3.Replace()方法方法将字符串中指定的字符替换为新的字符,或者将指定的字符串替换为新的字符串。Replace()方法有两种重载形式:lstring Replace(char oldChar,char newChar) 替换字符lstring Replace(string oldValue,s
29、tring newValue) 替换字符串oldChar参数表示被替换的字符,newChar参数表示替换后的字符;oldValue参数表示被替换的字符串,newValue参数表示替换后的字符串。24string stringFirst = 有一个未来的目标,;string stringSecond = 让我们欢欣鼓舞。;string concatstring = string.Concat(stringFirst, stringSecond);string joinstring = string.Join(“n-”, new string stringFirst, stringSecond )
30、;Console.WriteLine(Concat()方法: + concatstring);Console.WriteLine(Join()方法: + joinstring); 4.Concat()4.Concat()和和Join()Join()都表示连接字符串都表示连接字符串Concat() 将一个或多个字符串对象连接为一个新的字符串;Join() 将指定的字符串数组中的所有字符串连接为一个新的字符串,而且被连接的各个字符串被指定分隔字符串分隔。Join的格式: string.Join(进行连接的分隔符, 要连接的字符串数组)例:例: 声明两个字符串,分别用Concat()和Join()将
31、它们连接起来:25 5.Trim()5.Trim()方法方法 Trim()删除最前和最后的空格,中间部分的空格不变。 String previousString = I am a string! ; String currentString = previousString.Trim() ; “ Im a string ! “ “Im a string!” 262.32.42 StringBuilder类2.22.1 .NET Framework中提供了另外一个类StringBuilder,它和String类相反,表示动态字符串,使用这个类可以动态的插入字符串、追加字符串以及删除字符串。追加字
32、符串插入字符串替换字符串移除字符串272.1 追加字符串将指定的字符或字符串追加到字符串的末尾。3种方法:lAppend()方法 将指定的字符或字符串追加到字符串的末尾lAppendLine()方法 追加指定的字符串完成后,还追加一个换行符号lAppendFormat()方法 先格式化被追加的字符串,然后将其追加到末尾 Append()方法几乎可以将任意值追加到字符串后面,如int、char、char、decimal、long、bool和short等等。常用的几种重载形式:方法含义Append(bool value )此实例的结尾追加指定的布尔值的字符串表示形式Append(char valu
33、e)此实例的结尾追加指定Unicode字符的字符串形式Append(double value)实例的结尾追加指定的双精度浮点数的字符串形式Append(int value)实例的结尾追加指定的32位有符号整数字符串形式Append(string value)在此实例的结尾追加指定字符串的副本Append(string value,int index,int count)在此实例的结尾追加指定子字符串的副本28 String s1 = This is the first string.; String s2 = The second is better.; StringBuilder sb =
34、new StringBuilder(); sb.Append(s1); sb.Append(s2); Console.WriteLine(sb);292.2 插入字符串 插入字符串可以使用Insert()方法, 几乎可以将任意类型的值插入到字符串的指定位置。Insert()方法常用的重载形式如表所示。 例:例:在歌词开头处添加歌名和演唱者,并且在结尾处再添加一句歌词。方法方法含含义Insert(int index,double value)将双精度浮点数的字符串形式插入到此实例的指定位置Insert(int index,string value)将字符串插入到此实例中的指定字符位置Insert
35、(int index,char value)将指定Unicode字符的字符串形式插入到指定位置Insert(int index,bool value)将布尔值的表现形式插入到此实例中的指定字符位置Insert(int index,int vlaue)将32位带符号整数的字符串形式插入到指定字符位置Insert(int index,string value,int count)将指定字符串的一个或更多副本插入到此实例中的指定字符位置StringBuilder sbuilder = new StringBuilder(昨天所有的荣誉,已变成遥远的回忆。n);sbuilder.Insert(0, 从
36、头再来(刘欢)n);sbuilder.Append(勤勤苦苦已度过半生,今夜重又走入风雨。);Console.WriteLine(sbuilder);302.3 替换字符串前面已经介绍过String类的Replace()方法,它用来表示替换字符或字符串。同样地,在StringBuilder类中也提供了Replace()方法。31 sbuilder.Replace(“刘欢”, “liuhuan”); / 将sbuilder中的“刘欢”都换成liuhuan2.4 移除字符串从字符串中指定位置开始移除其后指定数量的字符。StringBuilder类中提供了Remove()方法,该方法中有两个参数,第
37、一个参数表示开始移除字符的位置,第二个参数表示要移除的字符数量。StringBuilder strbuilder = new StringBuilder();strbuilder.Insert(0, 冬天来了,春天还会远吗?);strbuilder.Remove(4,6); / 从4号字符移除6个Console.WriteLine(strbuilder.ToString();323 正则表达式33 正则表达式是指由普通字符(例如字符A到Z)以及特殊字符(称为元字符)组成的文字模式。 它可以看作是一个模板,将某个字符模式与所搜索的字符串进行匹配。 正则表达式中有一套语法匹配规则,包括字符匹配、重
38、复匹配、字符定位、转义匹配、字符分组、字符替换和字符决策。 Visual Studio 中提供了很多用于处理正则表达式的类,如Regex类。在使用的时候,需要引入System.Text.RegularExpressions命名空间。 Regex是正则表达式的基本类,它提供了IsMatch()、Replace()、Match()和Split()等方法。34Regex类 1.1.字符匹配字符匹配 IsMatchIsMatch 该方法返回一个bool类型,匹配成功返回true,否则返回false。例:例:验证输入的电话号码是否合法:北京区号010后面紧跟8位数字。using System.Text.
39、RegularExpressions ;string Regextext = 010d8; string tel = Console.ReadLine();if (Regex.IsMatch(tel, Regextext) Console.WriteLine(恭喜您,您的电话号码有效。);35if ( Regex.IsMatch(tel, “0103-6”) / 010后面跟一位36之间的数字if ( Regex.IsMatch(str, “D”) / 一个非数字if ( Regex.IsMatch(addr, “w3”) ) / 包含www36 正则表达式正则表达式字符匹配字符匹配 字符匹配
40、表示一个范围内的字符是否匹配。例如,A-Z表示匹配字母A-Z之间的任意字符。它主要用于检查一个字符串中是否含有某种子字符串、将匹配的子字符串做替换或从字符串中取出符合某个条件的子字符串等。字符语法字符语法 语法解释语法解释语法例子语法例子d匹配0-9之间的数字d可以匹配1,不可以匹配10D匹配非数字D匹配F,不匹配3w单个字母/数字www匹配Ac3,不匹配#AW非字母/数字WW匹配#,不匹配das匹配空白字符Dsd匹配D 3,不匹配33S 匹配非空字符SSS匹配abc,不匹配a(空格)b.匹配任意字符匹配C$3,但是不匹配换行匹配括号中的任意字符3-5匹配3、4和5,不匹配6匹配非括号中的字符
41、3-5匹配6,不匹配35的字符 正则表达式正则表达式重复匹配重复匹配 在多数情况下可能要匹配一个单词或一组数字。重复匹配就是用来确定前面的内容重复出现的次数。字 符 语法语法解释语法例子nn是非负整数,匹配n次字符c3表示匹配ccc,不匹配cc或ccccn,n是非负整数,匹配n次和n次以上c2,表示匹配cc和ccc以上,不匹配cn,mn是非负整数,匹配n次以上和m次以下c1,3匹配c、cc和ccc,不匹配cccc?重复匹配0次或1次3?匹配3或0,不匹配非3和0,等价于0,1+匹配1次或多次s+匹配一个以上的s,等价于1,*匹配0次以上s*匹 配 0以 上 s, 不 匹 配 非N*s,等价于0
42、,3738 正则表达式正则表达式字符定位字符定位符号符号 描述描述例例匹配匹配从字符串的开头开始。d3567-777- 中的 567$匹配必须出现在字符串的末尾。 -d4$8-12-2012 中的 -2012b单词的开头或结尾,也就是单词的分界处,只匹配一个位置baw*b匹配以字母a开头的单词先是某个单词开始处(b),然后是字母a,然后是任意数量的字母 (w*),最后是单词结束处(b)string s = Console.ReadLine();if (Regex.IsMatch(s, “0-9*$”) / 定位在开头,匹配0次以上必须出现在字符串末尾 Console.WriteLine(ok)
43、;例:例: 判断是否是数字 前面判断北京电话号码的例子,如何确保:输入的全是数字,区号010之前和8位号码之后都没有其它内容?2.Replace()2.Replace()方法方法 在正则表达式中,Replace()方法实现字符串的替换。例:例: 将电子邮件地址中的“”替换为“WO”string test = Regex.Replace(email, , WO“) ;39 Regex类 Regex类 3.Split()3.Split()方法方法 根据匹配正则表达式进行拆分,储存在字符串数组中。两种重载形式:lRegex.Split(string input,string pattern)lReg
44、ex.Split(string input,string pattern,RegexOptions options)string addr = &;string list = Regex.Split(addr, W+); foreach (string str in list) Console.WriteLine(str); / 循环输出各个字符串404.34 日期和时间处理4.24.1DateTime结构TimeSpan结构日期和时间的常用操作414.1 DateTime结构 DateTime结构是一个值类型,表示时间上的一刻,通常以日期和当天的时间表示。它的时间值以100纳秒为单位(该单位
45、称为刻度tick)进行计算。 DateTime结构中只有两个静态的只读字段:MaxValue和MinValue。MaxValue表示DateTime的最大可能值,MinValue表示DateTime的最小可能值。 例如分别使用MaxValue和MinValue获得DateTime的最大值和最小值,然后在控制台输出,具体代码如下:DateTime maxtime = DateTime.MaxValue;DateTime mintime = DateTime.MinValue;Console.WriteLine(maxtime + * + mintime); 运行上述代码,控制台输出的结果是:99
46、99-12-31 23:59:59*0001-1-1 00:00:00 1.1.字段字段4243 2.2.属性属性 DateTime结构中不仅包括字段,还包括属性。在DateTime结构中包含16个只读属性,其中3个静态属性,13个实例属性。通过这些属性我们可以获取系统的当前时间、年份、月份、分钟等等。属性属性说明说明Now静态属性,获取计算机上的当前时间Today静态属性,获取当前日期UtcNow静态属性,获取计算机上的当前时间,世界时间(UTC)Day获取此实例所表示的日期为该月中的第几天DayOfWeek获取此实例所表示的日期是星期几DayOfYear获取此实例所表示的日期是该年中的第几
47、天Year获取年份部分Month获取日期的月份部分Date获取日期部分Hour获取日期的小时部分Minute获取日期的分钟部分Second获取日期的秒部分Millisecond获取日期的毫秒部分Ticks获取日期和时间的刻度数(计时周期数)TimeOfDay获取当天时间,即当天自午夜以来已经过时间的部分DateTime nowtime = DateTime.Now;Console.WriteLine(当前时间: + nowtime);Console.WriteLine(当前年份: + DateTime.Now.Year);Console.WriteLine(当前月份: + DateTime.N
48、ow.Month);Console.WriteLine(当前天数: + DateTime.Now.Day);443.3.方法方法方法方法说明说明Compare()比较两个DateTime实例,返回一个指示第一个实例是早于、等于还是晚于第二个实例DaysInMonth()返回指定年和月份中的天数Equals()比较两个DateTime结构是否相等IsLeapYear()判断指定的年份是否为闰年。如果是返回true,否则返回falseParse()将字符串转换为等效的DateTimeParseExact()将字符串转换为等效的DateTime。其格式必须与指定格式匹配TryParse()将字符串转
49、换为等效的DateTime。成功返回true,否则falseTryParseExact()将字符串转换为等效的DateTime。格式必须与指定格式匹配DateTime结构中的方法包括静态方法和实例方法,其中静态方法14个,实例方法28个。下表列出了一些静态方法。454.2 TimeSpan结构TimeSpan表示时间间隔或持续时间,按正负天数、小时数、分钟数、秒数以及秒的小数部分进行度量。用于度量持续时间的最大时间单位是天,时间间隔以天为单位来度量。TimeSpan的值是等于所表示时间间隔的刻度数。一个刻度等于100纳秒,TimeSpan对象的值的范围在MinValue和MaxValue之间。
50、TimeSpan值可以表示为: -d.hh:mm:ss.ff -d.hh:mm:ss.ff 其中减号是可选的,它指示负时间间隔,d分量表示天,hh表示小时(24小时制),mm表示分钟,ss表示秒,而ff为秒的小数部分。即时间间隔包括整的正负天数、天数和剩余的不足一天的时长,或者只包含不足一天的时长。TimeSpan ts0 = new TimeSpan(12, 32, 40); 例:例:创建TimeSpan结构的对象ts0,指定该对象的小时部分为12、分钟部分为32、秒部分为40。最终的对象值为12:32:40。代码如下:4647 TimeSpan结构中包含8个静态字段,其中3个只读字段,5个
51、常数字段。3个只读字段分别是:MaxValue表示最大的TimeSpan值,MinValue表示最小的TimeSpan值,Zero指定零TimeSpan值。5个常数字段是: lTicksPerDay 一天中的刻度数lTicksPerHour 1小时的刻度数lTicksPerMillisecond 1毫秒的刻度数lTicksPerMinute 1分钟的刻度数lTicksPerSecond 1秒的刻度数 1.1.字段字段 例如使用MaxValue、MinValue和TicksPerHour字段获得TimeSpan结构的最大值、最小值和1小时的刻度数并且将结果输出。代码如下:Console.Writ
52、eLine(TimeSpan的最大值:+TimeSpan.MaxValue);Console.WriteLine(TimeSpan的最小值: + TimeSpan.MinValue);Console.WriteLine(1小时的刻度数:+TimeSpan.TicksPerHour); TimeSpan结构主要包含11个实例属性,均为只读属性: 2.2.属性属性属性属性说明说明Days获取TimeSpan结构所表示的时间间隔的天数部分Hours获取TimeSpan结构所表示的时间间隔的小时数Milliseconds获取TimeSpan结构所表示的时间间隔的毫秒数Minutes获取TimeSpan
53、结构所表示的时间间隔的分钟Seconds获取TimeSpan结构所表示的时间间隔的秒数Ticks表示当前TimeSpan结构的值的刻度数TotalDays获取以整天数和天的小数部分表示的当前TimeSpan的值TotalHours获取以整小时数和小时的小数部分表示的当前TimeSpan结构的值TotalMinutes获取以整分钟数和分钟的小数部分表示的当前TimeSpan结构的值TotalSeconds获取以整秒数和秒的小数部分表示的当前TimeSpan结构的值TotalMilliseconds获取以整毫秒数和毫秒的小数部分表示的当前TimeSpan结构的值48 和DateTime结构一样,T
54、imeSpan结构中也包含静态方法和实例方法。TimeSpan结构中的静态方法: 3.3.方法方法方法方法说明说明Compare()比较两个TimeSpan的值,它的返回值为-1、0和1Equlas()判断两个TimeSpan结构的实例是否相等。相等返回trueFromDays()根据指定的天数,创建一个TimeSpan结构的实例FromHours()根据指定的小时数,创建一个TimeSpan结构的实例FromMinutes()根据指定的分钟数,创建一个TimeSpan结构的实例FromSeconds()根据指定的秒数,创建一个TimeSpan结构的实例FromMilliseconds() 根
55、据指定的毫秒数,创建一个TimeSpan结构的实例FromTicks()根据指定的刻度数,创建一个TimeSpan结构的实例Parse()将时间间隔的字符串转换为相应的TimeSpan结构ParseExact()将时间间隔的字符串转换为相应的TimeSpan结构。该字符串的格式必须与指定的格式完全匹配ReferenceEquals()确定指定的System.Object实例是否是相同的实例TryParse()将时间间隔的字符串转换为相应的TimeSpan结构。TryParseExact()将时间间隔的字符串转换为相应的TimeSpan结构。返回一个指示是否成功的值494.3 日期和时间的常用操
56、作1.1.追加时间追加时间 追加时间是指将指定的时间追加到一个时间上,获得一个新的时间。以Add开头的方法都可以实现追加时间的功能。主要包括Add()方法、AddYears()方法、AddMonths()、AddDays()、AddHours()、AddMinutes()、AddSeconds()、AddMilliseconds()和AddTicks()方法。 例:例: 实例方法AddYears()、AddMonths()等方法将时间追加到dtime对象,并获得一个新的时间。DateTime dtime = DateTime.Now;DateTime newTime= dtime.AddYea
57、rs(1).AddDays(1).AddYears(3).AddMonths(2);5051 Subtract()方法可以计算时间差。它的参数可以是DateTime类型,也可以是TimeSpan类型。如果参数为DateTime类型返回值为TimeSpan类型;如果参数为TimeSpan类型返回值为DateTime类型。 2. 2. Subtract()计算时间差计算时间差 例:例:DateTime dttime = Convert.ToDateTime(2012-1-1 10:29:23);TimeSpan subtime = DateTime.Now.Subtract(dttime);Con
58、sole.WriteLine(subtime);TimeSpan tspan = new TimeSpan(12, 34, 53);DateTime spantime = DateTime.Now.Subtract(tspan);Console.WriteLine(spantime); DateTime结构提供了多个方法,主要以To开头,使用这些方法可以将DateTime对象转换为不同的字符串格式。这些方法包括ToString()、ToLongDateString()、ToLongTimeString()、ToShortDateString()和ToShortTimeString()。 3. 3.格式化格式化string str1 = DateTime.Now.ToString();string str2 = DateTime.Now.ToShortTimeString();52