0. {前言}

上一篇内容先容了Console类和Math类,这篇内容着重先容一下C#“中时间日期「的」”处理方式。

上一篇勘误: 上一篇中关于静态类没有组织函数,这一表述有误。准确「的」说法是C#中静态类不包罗通例组织函数,但可以添加一个静态组织函数。
静态组织函数「与」通俗通『俗组』织函数「的」区别是,静态组织函数没有接见修饰符,即接见修饰符是默认「的」,且静态组织函数只能是无参「的」,并添加 static 修饰符;静态组织函数不能手动挪用,会在类加载「的」时刻由系统自己加载。

1 DateTime 和 TimeSpan

DateTime『示意』时间点,TimeSpan『示意』 时间段。在C#中,这两个都是结构体,结构体「与」类都能继续并实现接口,(然则「与」类差别「的」是结)构体在内存中存放在栈里。这部门在微软官方文档中关于CLR有过先容。『后续』也会针对CLR写一个系列。这里就不做过多「的」先容了。

DateTime延伸开来也有许多内容要讲,这里只做一个大要「的」先容:

1. 建立一个DateTime

DateTime time = new DateTime(2018,1,20);// 2018年1(月)20日 0时0分0秒
DateTime time = new DateTime(2019,11,30, 12, 01, 59);// 2019年11(月)30日,12:01:59
DateTime time = DateTime.Now;// 『示意』代码运行到这里「的」系统时间,一样平常意义上「的」当前时间
DateTime time = new DateTime(long ticks);// 以时间刻度盘算日期,以公历 0001 年 1 (月) 1 日 00:00:00.000 以来所履历「的」以 100 “纳秒为距”离「的」距离数来『示意』

这些是我们常用「的」建立日期「的」方式,另有一些通过日历工具连系日向来建立日期时间,不外这块在不涉及到程序国际化之前不需要做「过多」「的」深入。

需要注重「的」是,DateTime.Now在每次运行效果都不一样,这个属性返回「的」是系统运行时当前时间,而不是程序编写时「的」时间。「与」之对应「的」另有一个DaTime.Today,这个属性返回效果是当天,也就是Now去掉时分秒「的」时间。

2. 日期调换

DateTime提供了许多可以调换日期「的」方式,这些方式可以获取一个盘算之后「的」时间值:

public DateTime AddDays (double value);// 盘算天数,正数代表 天数增添,负数代表天数削减
public DateTime AddHours (double value);// 〖返回一个〗新「的」 DateTime,它将指定「的」小时数加到此实例「的」值上。
public DateTime AddMilliseconds (double value);//〖返回一个〗新「的」 DateTime,它将指定「的」毫秒数加到此实例「的」值上。
public DateTime AddMonths (int months);//〖返回一个〗新「的」 DateTime,它将指定「的」(月)数加到此实例「的」值上
public DateTime AddMonths (int months);// 〖返回一个〗新「的」 DateTime,它将指定「的」(月)数加到此实例「的」值上
public DateTime AddSeconds (double value);/// 〖返回一个〗新「的」 DateTime,《它将》指定「的」秒数加到此实例「的」值上。
public DateTime AddTicks (long value);// 〖返回一个〗新「的」 DateTime,它将指定「的」刻度数加到此实例「的」值上,也就是组织函数里「的」ticks
public DateTime AddYears (int value);//〖返回一个〗新「的」 DateTime,它将指定「的」年份数加到此实例「的」值上。

以上是DateTime类对日期盘算「的」支持,其中参数若是是正「的」『示意』时间后移,若是是负「的」则『示意』时间向前移。

需要注重「的」一点就是, 日期「的」调换不[会在原有「的」DateTime元素上调换,会返回一个盘算之后「的」日期类型。

3. 日期算术运算

说了这么多DateTime,没有先容TimeSpan,那么这里就会先容一下TimeSpan是什么了。TimeSpan『示意』一个时间距离,也就是两个DateTime之间「的」差值。说到这里,人人也应该明了日期「的」算术运算应该是指什么了。以下来看一组示例:

class Program
{
    static void Main(string[] args)
    {
        DateTime lastYear = new DateTime(2019, 03, 08, 20,49, 36);
        DateTime now = DateTime.Now;
        TimeSpan span = now - lastYear;
        DateTime newTime = lastYear + span;
    }
}

这就是C#中关于日期运算「的」基本内容。那我们来看看 TimeSpan里封装了哪些内容吧。

TimeSpan「的」属性:

public int Days { get; }//{获取当前} TimeSpan 结构所『示意』「的」时间距离「的」天数部门。
public int Hours { get; }// {获取当前} TimeSpan 结构所『示意』「的」时间距离「的」小时数部门。
public int Milliseconds { get; }//{获取当前} TimeSpan 结构所『示意』「的」时间距离「的」毫秒数部门。
public int Minutes { get; }//{获取当前} TimeSpan 结构所『示意』「的」时间距离「的」分钟数部门。
public int Seconds { get; }//{获取当前} TimeSpan 结构所『示意』「的」时间距离「的」秒数部门。

以上属性『示意』一个TimeSpan「的」代表「的」时间距离中「的」天数、小时、分钟等。

public double TotalDays { get; }//《获取以整天数和天「的」小》数部门『示意』「的」当前 TimeSpan ‘【结构「的」值】’。
public double TotalHours { get; }//获取以整小时数和小时「的」小数部门『示意』「的」当前 TimeSpan ‘【结构「的」值】’。
public double TotalMinutes { get; }//获取以整分钟数和分钟「的」小数部门『示意』「的」当前 TimeSpan ‘【结构「的」值】’。
public double TotalSeconds { get; }//获取以整秒数和秒「的」小数部门『示意』「的」当前 TimeSpan ‘【结构「的」值】’。
public double TotalMilliseconds { get; }//<获取以整毫秒>数和毫秒「的」小数部门『示意』「的」当前 TimeSpan ‘【结构「的」值】’。

上述几组属性『示意』以XXX为单元,返回「的」TimeSpan「的」值,「与」之相对应「的」TimeSpan提供了一组FormXXX「的」方式,可以将double类型「的」值还原成TimeSpan。

由于TimeSpan『示意』时间距离,以是TimeSpan也允许两个TimeSpan举行加法运算,并提供了一个Add(TimeSpan ts)「的」方式。

这些是TimeSpan最常用「的」一些属性和方式。不外在使用TimeSpan中需要注重「的」地方是,TimeSpan盘算返回「的」值可正可负,正值『示意』时间距离「的」头在前尾在后,负值『示意』头在后尾在前;TimeSpan中没有提供TotalMonths这个方式,这是由于每个(月)详细有若干天不是固定值,若是想盘算两个日期直接相差几个(月),则需要自定义对应「的」盘算方式了。

4. DateTime「与」字符串之间「的」恩怨情仇

在程序中,用户或者三方输入「的」日期大多都是字符串花样「的」,而且系统获取到「的」时间也大多会转成字符串给其他人展示,以是这里就会涉及到DateTime「与」字符串之间「的」相互转换。

我们先试试日期「的」种种ToString会发生什么样「的」效果:

class Program
{
    static void Main(string[] args)
    {
        DateTime now = DateTime.Now;
        Console.WriteLine("ToString :{0}", now.ToString());
        Console.WriteLine("ToLongDateString :{0}", now.ToLongDateString());
        Console.WriteLine("ToLongTimeString :{0}", now.ToLongTimeString());
        Console.WriteLine("ToShortDateString :{0}",now.ToShortDateString());
        Console.WriteLine("ToShortTimeString :{0}",now.ToShortTimeString());
    }
}

效果:

这是DateTime「的」默认输出效果,“固然”会凭据系统「的」语言和区域等设置转变而发生差别「的」转变。为了制止这种转变,C#提供了一种日期类型「的」花样化模板,这里先容几个常用「的」花样代表:

花样符 寄义
yy 年份。00~99,若是年份大于99,则只保留后两位。如2020年则「显示」20,2019年则「显示」19
yyyy 年份,【「显示」四位】。0000~9999
M (月)份,「显示」1~12
MM (月)份,「显示」01~12
d 天,1~31(详细看(月)份允许「的」最大天数)
dd 「与」d【一致】,「显示」为01~31
h 小时,12小时制「显示」1~12
hh 「与」h【一致】,「显示」为01~12
H 小时,24小时制,「显示」0~23
HH 小时,24小时制,「显示」00~23
m 分钟,「显示」0~59
mm 分钟,「显示」00~59
s 秒,「显示」0~59
ss 秒,「显示」00~59
f 『示意』日期和时间值「的」十分之几秒,「显示」0~9
ff 『示意』百分之几秒,「显示」00~99

最后「的」f,f「的」次数越多精度越细,但需要思量系统「的」时钟精度。

在现实开发中,最常用「的」花样是:yyyy-MM-dd HH:mm:ss,「显示」效果就是:2020-04-25 12:00:00。其中连接符可以凭据开发需求替换。

上述是时间转字符串,反过来也有字符串转时间。

使用DateTime.Parse或者Convert.ToDateTime【就可】以将字符串转换为时间类型。C#并不需要在字符串转日期「的」时刻指定字符串「的」「显示」花样,这是由于一个约定优于设置「的」设计理念。C#通过剖析字符串,然后将字符串转换成对应「的」时间类型。“固然”,在准确剖析到时间「的」时刻,C#会抛出异常。为此,C#提供了DateTime.TryParse方式,该方式不会抛出异常,会返回一个是否准确转换「的」bool值。

它「的」声明如下:

public static bool TryParse (string s, out DateTime result);// 使用了result作为现实转换效果

虽然C# 不用提供转换花样就可以读取,然则若是时间字符串「的」花样对照少见呢,或者说就想指定一个花〖样〗字符串,怎么办?别急,C#还提供了一个方式:

public static DateTime ParseExact (string s, string format, IFormatProvider provider);

不外,(这个方式需)要指定一个区域性「的」花样信息:provider。这个信息可以通过CultureInfo.CurrentCulture来获取,这个属性『示意』系统「的」当前区域信息。

以上是DateTime「的」基本内容,有兴趣「的」小伙伴可以查阅一下微软「的」官方文档继续深入研究一下。

更多内容烦请关注我「的」博客

,

Sunbet

Sunbet www.895612.com www.sunbet.us是sunbet「的」唯一平台。Sunbet开放Sunbet会员开户网址、Sunbet{代理开}户、Sunbet手机版下载、Sunbet“电”脑客户端下载等业务。

Allbet Gaming声明:该文看法仅代表作者自己,与阳光在线无关。转载请注明:温州城建论坛:C# 基础知识系列- 13 常见类库先容(二)日期时间类
发布评论

分享到:

舟山景点:孩子勤奋学习没效果,别急着指责,从认知纪律来领会一下学习天性
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。