c#把日期改成数字字符串_C#将字符串转换为日期

1.使用Convert.ToDateTime()方法,用法如下:

string str = "2017-08-10";

DateTime dt= Convert.ToDateTime(str);

不过Convert.ToDateTime()方法,只能解释系统能识别的格式的字符串,如:

2017-08-10     08/10/2017   2017/08/10,

如果是其他格式的字符串,如:20101212 是无法转换的

2.使用DateTime.Parse()方法

try{

DateTime dt= DateTime.Parse("2017-08-10");

}catch(FormatException fe)

{

MessageBox.Show(fe.Message);

}

由于try-catch块占用更多行空间,为了使代码更简洁,所以微软增加了DataTime.TryParse()方法,该方法需要一个DateTime类型变量作为输出参数:

DateTime dt;if (DateTime.TryParse("20170810", outdt))

{

MessageBox.Show(dt.ToString("yyyy-MM-dd"));

}else{

MessageBox.Show("Something is Wrong");

}

和Convert.ToDateTime()方法一样,不管是Parse()还是TryParse()都只能转换系统能识别的格式

3.为了能将特定格式的字符串转化为DateTime类型,可以使用DateTime.ParseExact() ----- Exact 精确的

try{

DateTime dt= DateTime.ParseExact("20170810", "yyyyMMdd", CultureInfo.CurrentCulture);

}catch(FormatException fe)

{

MessageBox.Show(fe.Message);

}

注意:ParseExact()方法,必须指定将要解释的字符串日期的格式,如上述的"yyyyMMdd"。

和Parse()对应的TryParse()一样,ParseExact()也有TryParseExact()方法,而且作用也是一样

yyyy/MM/dd和yyyy/M/d的区别:

yyyy/MM/dd 只能匹配 2017/12/01这种格式,2017/12/1则无法解释;要求更严格

yyyy/M/d 则技能匹配  2017/12/12,2017/12/01,也能匹配2017/12/1;匹配范围更大,当月和日不足两位时,既可以带0也可以不带

由于最终处理日期使用的是System.Globalization.Calendar类,所以不仅要格式满足,还需要是有效的日期,如:2017/99/99就是无效的

4.通过Reflector查看.net的源代码:

Parse()和ParseExact()方法都有3个重载,继续深入:

前面两个Parse()方法,底层都是直接调用有3个参数的Parse(),而这个Parse()方法的底层又去调用了TryParse():

同理 ParseExact()方法的底层原理一样

所以不管调用Parse()是TryParse(),底层的处理是一样的。

5.日期转换会与区域相关,所以需要考虑CultureInfo

CultureInfo类提供特定区域的书写系统,日历、字符串、日期和数字的格式化,所以使用不同的CultureInfo输出的结果可能会不一样

例如,在全球各地都有客户端,而服务器在美国,每一台客户端发送回服务器的日期如果不做任何处理的话,则会出现各种各样格式的日期,

所以为了不受区域的影响,可以使用 CultureInfo.InvariantCulture 属性 (---- Invariant 不变的)

注意:

CultureInfo.InvariantCulture关联的是英语语言,但与国家区域无关;

以上说的ToDateTime()、Parse()、TryParse()、ParseExact()、TryParseExact()都能接受一个CultureInfo类型的参数,

所以只要设置了CultureInfo.InvariantCulture,即使通过控制面板修改日期和时间的格式,都不会影响到转换的结果

对应的代码如下:

ToDateTime():

string str = "2017-08-10";

DateTime dt= Convert.ToDateTime(str, CultureInfo.InvariantCulture);

Parse():

DateTime dt = DateTime.Parse("2017-08-10", CultureInfo.InvariantCulture);

TryParse():

if (DateTime.TryParse("20170810", CultureInfo.InvariantCulture, DateTimeStyles.None, outdt))

{

}

ParseExact():

DateTime dt = DateTime.ParseExact("20170810", "yyyyMMdd", CultureInfo.InvariantCulture);

TryParseExact():

if (DateTime.TryParseExact("20170810", "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None, outdt))

{ }

6.总结

如果是将标准的字符串转化为DateTime,直接使用Convert.ToDateTime()   或者  DateTime.Parse()即可;

如果是将比较奇怪格式的字符串转换为DateTime,或者只运行某种格式的字符串时,就是用DateTime.ParseExact 和 DateTime.TryParseExact();

如果不想代码中出现try--catch块的,就使用TryParse()或TryParseExact().

如果需要不受区域影响,则加上CultureInfo.InvariantCulture。

你可能感兴趣的:(c#把日期改成数字字符串)