https://www.cnblogs.com/tmdsleep/p/5700058.html
C# Datetime 使用详解
获得当前系统时间: DateTime dt = DateTime.Now; Environment.TickCount可以得到“系统启动到现在”的毫秒值 DateTime now = DateTime.Now; Console.WriteLine(now.ToString("yyyy-MM-dd")); //按yyyy-MM-dd格式输出s Console.WriteLine(dt.ToString()); // 26/11/2009 AM 11:21:30 Console.WriteLine(dt.ToFileTime().ToString()); // 129036792908014024 // Converts the value of the current System.DateTime object to a Windows file time Console.WriteLine(dt.ToFileTimeUtc().ToString()); // 129036792908014024 // Converts the value of the current System.DateTime object to a Windows file time Console.WriteLine(dt.ToLocalTime().ToString()); // 26/11/2009 AM 11:21:30 // Converts the value of the current System.DateTime object to local time. Console.WriteLine(dt.ToLongDateString().ToString()); // 2009年11月26日 Console.WriteLine(dt.ToLongTimeString().ToString()); // AM 11:21:30 Console.WriteLine(dt.ToOADate().ToString()); // 40143.4732731597 Console.WriteLine(dt.ToShortDateString().ToString()); // 26/11/2009 Console.WriteLine(dt.ToShortTimeString().ToString()); // AM 11:21 Console.WriteLine(dt.ToUniversalTime().ToString()); // 26/11/2009 AM 3:21:30 Console.WriteLine(dt.Year.ToString()); // 2009 Console.WriteLine(dt.Date.ToString()); // 26/11/2009 AM 12:00:00 Console.WriteLine(dt.DayOfWeek.ToString()); // Thursday Console.WriteLine(dt.DayOfYear.ToString()); // 330 Console.WriteLine(dt.Hour.ToString()); // 11 Console.WriteLine(dt.Millisecond.ToString()); // 801 (毫秒) Console.WriteLine(dt.Minute.ToString()); // 21 Console.WriteLine(dt.Month.ToString()); // 11 Console.WriteLine(dt.Second.ToString()); // 30 Console.WriteLine(dt.Ticks.ToString()); // 633948312908014024 Console.WriteLine(dt.TimeOfDay.ToString()); // 12:29:51.5181524 // Gets the time of day for this instance. // 返回 A System.TimeSpan that represents the fraction of the day that has elapsed since midnight. Console.WriteLine(dt.ToString()); // 26/11/2009 PM 12:29:51 Console.WriteLine(dt.AddYears(1).ToString()); // 26/11/2010 PM 12:29:51 Console.WriteLine(dt.AddDays(1.1).ToString()); // 27/11/2009 PM 2:53:51 Console.WriteLine(dt.AddHours(1.1).ToString()); // 26/11/2009 PM 1:35:51 Console.WriteLine(dt.AddMilliseconds(1.1).ToString()); //26/11/2009 PM 12:29:51 Console.WriteLine(dt.AddMonths(1).ToString()); // 26/12/2009 PM 12:29:51 Console.WriteLine(dt.AddSeconds(1.1).ToString()); // 26/11/2009 PM 12:29:52 Console.WriteLine(dt.AddMinutes(1.1).ToString()); // 26/11/2009 PM 12:30:57 Console.WriteLine(dt.AddTicks(1000).ToString()); // 26/11/2009 PM 12:29:51 Console.WriteLine(dt.CompareTo(dt).ToString()); // 0 Console.WriteLine(dt.Add(new TimeSpan(1,0,0,0)).ToString()); // 加上一个时间段 (注: System.TimeSpan为一个时间段,构造函数如下 public TimeSpan(long ticks); // ticks: A time period expressed in 100-nanosecond units. //nanosecond:十亿分之一秒 new TimeSpan(10,000,000) 为一秒 public TimeSpan(int hours, int minutes, int seconds); public TimeSpan(int days, int hours, int minutes, int seconds); public TimeSpan(int days, int hours, int minutes, int seconds, int milliseconds); ) Console.WriteLine(dt.Equals("2005-11-6 16:11:04").ToString()); // False Console.WriteLine(dt.Equals(dt).ToString()); // True Console.WriteLine(dt.GetHashCode().ToString()); // 1103291775 Console.WriteLine(dt.GetType().ToString()); // System.DateTime Console.WriteLine(dt.GetTypeCode().ToString()); // DateTime long Start = Environment.TickCount; //单位是毫秒 long End = Environment.TickCount; Console.WriteLine("Start is : "+Start); Console.WriteLine("End is : "+End); Console.WriteLine("The Time is {0}",End-Start); Console.WriteLine(dt.GetDateTimeFormats('s')[0].ToString()); //2009-11-26T13:29:06 Console.WriteLine(dt.GetDateTimeFormats('t')[0].ToString()); //PM 1:29 Console.WriteLine(dt.GetDateTimeFormats('y')[0].ToString()); //2009年11月 Console.WriteLine(dt.GetDateTimeFormats('D')[0].ToString()); //2009年11月26日 Console.WriteLine(dt.GetDateTimeFormats('D')[1].ToString()); //星期四, 26 十一月, 2009 Console.WriteLine(dt.GetDateTimeFormats('D')[2].ToString()); //26 十一月, 2009 Console.WriteLine(dt.GetDateTimeFormats('D')[3].ToString()); //星期四 2009 11 26 Console.WriteLine(dt.GetDateTimeFormats('M')[0].ToString()); //26 十一月 Console.WriteLine(dt.GetDateTimeFormats('f')[0].ToString()); //2009年11月26日 PM 1:29 Console.WriteLine(dt.GetDateTimeFormats('g')[0].ToString()); //26/11/2009 PM 1:29 Console.WriteLine(dt.GetDateTimeFormats('r')[0].ToString()); //Thu, 26 Nov 2009 13:29:06 GMT (注: 常用的日期时间格式: 格式 说明 输出格式 d 精简日期格式 MM/dd/yyyy D 详细日期格式 dddd, MMMM dd, yyyy f 完整格式 (long date + short time) dddd, MMMM dd, yyyy HH:mm F 完整日期时间格式 (long date + long time) dddd, MMMM dd, yyyy HH:mm:ss g 一般格式 (short date + short time) MM/dd/yyyy HH:mm G 一般格式 (short date + long time) MM/dd/yyyy HH:mm:ss m,M 月日格式 MMMM dd s 适中日期时间格式 yyyy-MM-dd HH:mm:ss t 精简时间格式 HH:mm T 详细时间格式 HH:mm:ss ) Console.WriteLine(string.Format("{0:d}", dt)); //28/12/2009 Console.WriteLine(string.Format("{0:D}", dt)); //2009年12月28日 Console.WriteLine(string.Format("{0:f}", dt)); //2009年12月28日 AM 10:29 Console.WriteLine(string.Format("{0:F}", dt)); //2009年12月28日 AM 10:29:18 Console.WriteLine(string.Format("{0:g}", dt)); //28/12/2009 AM 10:29 Console.WriteLine(string.Format("{0:G}", dt)); //28/12/2009 AM 10:29:18 Console.WriteLine(string.Format("{0:M}", dt)); //28 十二月 Console.WriteLine(string.Format("{0:R}", dt)); //Mon, 28 Dec 2009 10:29:18 GMT Console.WriteLine(string.Format("{0:s}", dt)); //2009-12-28T10:29:18 Console.WriteLine(string.Format("{0:t}", dt)); //AM 10:29 Console.WriteLine(string.Format("{0:T}", dt)); //AM 10:29:18 Console.WriteLine(string.Format("{0:u}", dt)); //2009-12-28 10:29:18Z Console.WriteLine(string.Format("{0:U}", dt)); //2009年12月28日 AM 2:29:18 Console.WriteLine(string.Format("{0:Y}", dt)); //2009年12月 Console.WriteLine(string.Format("{0}", dt)); //28/12/2009 AM 10:29:18 Console.WriteLine(string.Format("{0:yyyyMMddHHmmssffff}", dt)); //200912281029182047 计算2个日期之间的天数差 DateTime dt1 = Convert.ToDateTime("2007-8-1"); DateTime dt2 = Convert.ToDateTime("2007-8-15"); TimeSpan span = dt2.Subtract(dt1); int dayDiff = span.Days ; 计算某年某月的天数 int days = DateTime.DaysInMonth(2009, 8); days = 31; 给日期增加一天、减少一天 DateTime dt =DateTime.Now; dt.AddDays(1); //增加一天 dt本身并不改变 dt.AddDays(-1);//减少一天 dt本身并不改变 参数format格式详细用法: 格式字符关联属性/说明 dShortDatePattern DLongDatePattern f完整日期和时间(长日期和短时间) FFullDateTimePattern(长日期和长时间) g常规(短日期和短时间) G常规(短日期和长时间) m、MMonthDayPattern r、RRFC1123Pattern s使用当地时间的SortableDateTimePattern(基于ISO8601) tShortTimePattern TLongTimePattern uUniversalSortableDateTimePattern用于显示通用时间的格式 U使用通用时间的完整日期和时间(长日期和长时间) y、YYearMonthPattern 下面列出可被合并以构造自定义模式的模式: d月中的某一天。一位数的日期没有前导零。 dd月中的某一天。一位数的日期有一个前导零。 ddd周中某天的缩写名称,在AbbreviatedDayNames中定义。 dddd周中某天的完整名称,在DayNames中定义。 M月份数字。一位数的月份没有前导零。 MM月份数字。一位数的月份有一个前导零。 MMM月份的缩写名称,在AbbreviatedMonthNames中定义。 MMMM月份的完整名称,在MonthNames中定义。 y不包含纪元的年份。如果不包含纪元的年份小于10,则显示不具有前导零的年份。 yy不包含纪元的年份。如果不包含纪元的年份小于10,则显示具有前导零的年份。 yyyy包括纪元的四位数的年份。 gg时期或纪元。如果要设置格式的日期不具有关联的时期或纪元字符串,则忽略该模式。 h12小时制的小时。一位数的小时数没有前导零。 hh12小时制的小时。一位数的小时数有前导零。 H24小时制的小时。一位数的小时数没有前导零。 HH24小时制的小时。一位数的小时数有前导零。 m分钟。一位数的分钟数没有前导零。 mm分钟。一位数的分钟数有一个前导零。 s秒。一位数的秒数没有前导零。 ss秒。一位数的秒数有一个前导零。 f秒的小数精度为一位。其余数字被截断。 ff秒的小数精度为两位。其余数字被截断。 fff秒的小数精度为三位。其余数字被截断。 ffff秒的小数精度为四位。其余数字被截断。 fffff秒的小数精度为五位。其余数字被截断。 ffffff秒的小数精度为六位。其余数字被截断。 fffffff秒的小数精度为七位。其余数字被截断。 t在AMDesignator或PMDesignator中定义的AM/PM指示项的第一个字符(如果存在)。 tt在AMDesignator或PMDesignator中定义的AM/PM指示项(如果存在)。 z时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数没有前导零。例如,太平洋标准时间是“-8”。 zz时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数有前导零。例如,太平洋标准时间是“-08”。 zzz完整时区偏移量(“+”或“-”后面跟有小时和分钟)。一位数的小时数和分钟数有前导零。例如,太平洋标准时间是“-08:00”。 :在TimeSeparator中定义的默认时间分隔符。 /在DateSeparator中定义的默认日期分隔符。 %c其中c是格式模式(如果单独使用)。如果格式模式与原义字符或其他格式模式合并,则可以省略“%”字符。 \c其中c是任意字符。照原义显示字符。若要显示反斜杠字符,请使用“\”。