2019.10.8 DateTime

来源:http://c.biancheng.net/view/2831.html

C# DateTime 类用于表示时间,所表示的范围是从 0001 年 1 月 1 日 0 点到 9999 年 12 月 31 日 24 点。

在 DateTime 类中提供了静态属性 Now,用于获取当前的日期和时间,如下所示。

DateTime.Now

DateTime 类提供了 12 个构造方法来创建该类的实例,但经常使用不带参数的方法创建 DateTime 类的实例。

在 DateTime 类中提供了常用的属性和方 法用于获取或设置日期和时间,如下表所示。

方法描述
Date 获取实例的日期部分
Day 获取该实例所表示的日期是一个月的第几天
DayOfWeek 获取该实例所表示的日期是一周的星期几
DayOfYear 获取该实例所表示的日期是一年的第几天
Add(Timespan value) 在指定的日期实例上添加时间间隔值 value
AddDays(double value) 在指定的日期实例上添加指定天数 value
AddHours(double value) 在指定的日期实例上添加指定的小时数 value
AddMinutes(double value) 在指定的日期实例上添加指定的分钟数 value
AddSeconds(double value) 在指定的日期实例上添加指定的秒数 value
AddMonths(int value) 在指定的日期实例上添加指定的月份 value
AddYears (int value) 在指定的日期实例上添加指定的年份 value


下面通过实例来演示 DateTime 类的使用。

【实例】使用 DateTime 类获取当前时间,分别输出该日是当月的第几天、星期几以 及一年中的第几天,并计算 30 天后的日期。

根据题目要求,代码如下。

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. DateTime dt = DateTime.Now;
  6. Console.WriteLine("当前日期为:{0}", dt);
  7. Console.WriteLine("当前时本月的第{0}天", dt.Day);
  8. Console.WriteLine("当前是:{0}", dt.DayOfWeek);
  9. Console.WriteLine("当前是本年度第{0}天", dt.DayOfYear);
  10. Console.WriteLine("30 天后的日期是{0}", dt.AddDays(30));
  11. }
  12. }

执行上面的代码,效果如下图所示。

DateTime 类的使用


在使用 DateTime 类中的 Add 方法时需要使用时间间隔类 TimeSpan,该类允许表示的时间间隔范围是 0 到 64 位整数。

两个日期的差可由时间间隔类 TimeSpan 的对象来存放。假设计算现在距离2018年6月1日儿童节的天数,代码如下。

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. DateTime dt1 = DateTime.Now;
  6. DateTime dt2 = new DateTime(2019, 6, 1);
  7. TimeSpan ts = dt2 - dt1;
  8. Console.WriteLine("间隔的天数为{0}天", ts.Days);
  9. }
  10. }

 

来源:https://blog.csdn.net/itleon/article/details/91044954
C# DateTime日期格式化

符号 说明 语法 示例(2016-05-09 13:09:55:2350)
  yy 年份后两位 DateTime.Now.ToString("yy") DateTime.Now.ToString("yy"); // => 16
  yyyy 4位年份 DateTime.Now.ToString("yyyy") DateTime.Now.ToString("yyyy"); // => 2016
  MM 两位月份;单数月份前面用0填充 DateTime.Now.ToString("MM") DateTime.Now.ToString("MM"); // => 05
  dd 日数 DateTime.Now.ToString("dd") DateTime.Now.ToString("dd"); // => 09
  ddd 周几 DateTime.Now.ToString("ddd") DateTime.Now.ToString("ddd"); // => 周一
  dddd 星期几 DateTime.Now.ToString("dddd") DateTime.Now.ToString("dddd"); // => 星期一
  hh 12小时制的小时数 DateTime.Now.ToString("hh")  DateTime.Now.ToString("hh"); // => 01
  HH 24小时制的小时数 DateTime.Now.ToString("HH") DateTime.Now.ToString("HH"); // => 13
  mm 分钟数 DateTime.Now.ToString("mm") DateTime.Now.ToString("mm"); // => 09
  ss 秒数 DateTime.Now.ToString("ss") DateTime.Now.ToString("ss"); // => 55
  ff 毫秒数前2位 DateTime.Now.ToString("ff") DateTime.Now.ToString("ff"); // => 23
  fff 毫秒数前3位 DateTime.Now.ToString("fff") DateTime.Now.ToString("fff"); // => 235
  ffff 毫秒数前4位 DateTime.Now.ToString("ffff") DateTime.Now.ToString("ffff"); // => 2350
  分隔符

可使用分隔符来分隔年月日时分秒。

包含的值可为:-、/、:等非关键字符

DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff"); // => 2016-05-09 13:09:55:2350

DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss:ffff"); // => 2016/05/09 13:09:55:2350

DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss:ffff dddd"); // => 2016/05/09 13:09:55:2350 星期一

 

 

DateTime各种时间字符串:

DateTime.Now.ToShortTimeString()
DateTime dt = DateTime.Now;
dt.ToString();//2005-11-5 13:21:25
dt.ToFileTime().ToString();//127756416859912816
dt.ToFileTimeUtc().ToString();//127756704859912816
dt.ToLocalTime().ToString();//2005-11-5 21:21:25
dt.ToLongDateString().ToString();//2005年11月5日
dt.ToLongTimeString().ToString();//13:21:25
dt.ToOADate().ToString();//38661.5565508218
dt.ToShortDateString().ToString();//2005-11-5
dt.ToShortTimeString().ToString();//13:21
dt.ToUniversalTime().ToString();//2005-11-5 5:21:25
dt.Year.ToString();//2005
dt.Date.ToString();//2005-11-5 0:00:00
dt.DayOfWeek.ToString();//Saturday
dt.DayOfYear.ToString();//309
dt.Hour.ToString();//13
dt.Millisecond.ToString();//441
dt.Minute.ToString();//30
dt.Month.ToString();//11
dt.Second.ToString();//28
dt.Ticks.ToString();//632667942284412864
dt.TimeOfDay.ToString();//13:30:28.4412864
dt.ToString();//2005-11-5 13:47:04
dt.AddYears(1).ToString();//2006-11-5 13:47:04
dt.AddDays(1.1).ToString();//2005-11-6 16:11:04
dt.AddHours(1.1).ToString();//2005-11-5 14:53:04
dt.AddMilliseconds(1.1).ToString();//2005-11-5 13:47:04
dt.AddMonths(1).ToString();//2005-12-5 13:47:04
dt.AddSeconds(1.1).ToString();//2005-11-5 13:47:05
dt.AddMinutes(1.1).ToString();//2005-11-5 13:48:10
dt.AddTicks(1000).ToString();//2005-11-5 13:47:04
dt.CompareTo(dt).ToString();//0
dt.Add(?).ToString();//问号为一个时间段
dt.Equals(“2005-11-6 16:11:04”).ToString();//False
dt.Equals(dt).ToString();//True
dt.GetHashCode().ToString();//1474088234
dt.GetType().ToString();//System.DateTime
dt.GetTypeCode().ToString();//DateTime
dt.GetDateTimeFormats(’s’)[0].ToString();//2005-11-05T14:06:25
dt.GetDateTimeFormats(‘t’)[0].ToString();//14:06
dt.GetDateTimeFormats(‘y’)[0].ToString();//2005年11月
dt.GetDateTimeFormats(‘D’)[0].ToString();//2005年11月5日
dt.GetDateTimeFormats(‘D’)[1].ToString();//2005 11 05
dt.GetDateTimeFormats(‘D’)[2].ToString();//星期六 2005 11 05
dt.GetDateTimeFormats(‘D’)[3].ToString();//星期六 2005年11月5日
dt.GetDateTimeFormats(‘M’)[0].ToString();//11月5日
dt.GetDateTimeFormats(‘f’)[0].ToString();//2005年11月5日 14:06
dt.GetDateTimeFormats(‘g’)[0].ToString();//2005-11-5 14:06
dt.GetDateTimeFormats(‘r’)[0].ToString();//Sat, 05 Nov 2005 14:06:25 GMT
string.Format(“{0:d}”,dt);//2005-11-5
string.Format(“{0}”,dt);//2005年11月5日
string.Format(“{0:f}”,dt);//2005年11月5日 14:23
string.Format(“{0:F}”,dt);//2005年11月5日 14:23:23
string.Format(“{0:g}”,dt);//2005-11-5 14:23
string.Format(“{0:G}”,dt);//2005-11-5 14:23:23
string.Format(“{0:M}”,dt);//11月5日
string.Format(“{0:R}”,dt);//Sat, 05 Nov 2005 14:23:23 GMT
string.Format(“{0:s}”,dt);//2005-11-05T14:23:23
string.Format(“{0:t}”,dt);//14:23
string.Format(“{0:T}”,dt);//14:23:23
string.Format(“{0:u}”,dt);//2005-11-05 14:23:23Z
string.Format(“{0:U}”,dt);//2005年11月5日 6:23:23
string.Format(“{0:Y}”,dt);//2005年11月
string.Format(“{0}”,dt);//2005-11-5 14:23:23
string.Format(“{0:yyyyMMddHHmmssffff}”,dt);


计算2个日期之间的天数差

DateTime dt1 = Convert.DateTime(“2007-8-1”);
DateTime dt2 = Convert.DateTime(“2007-8-15”);
TimeSpan span = dt2.Subtract(dt1);
int dayDiff = span.Days + 1;


计算某年某月的天数

int days = DateTime.DaysInMonth(2007, 8);
days = 31;


给日期增加一天、减少一天

DateTime dt =DateTime.Now;
dt.AddDays(1); //增加一天
dt.AddDays(-1);//减少一天
其它年份方法类似…


Oracle SQL里转换日期函数

to_date(“2007-6-6”,’YYYY-MM-DD”);
to_date(“2007/6/6”,’yyyy/mm/dd”);
如下一组数据,如何查找表里包含9月份的记录:


CGGC_STRATDATE CGGC_ENDDATE

2007-8-4 2007-9-5
2007-9-5 2007-9-20
2007-9-22 2007-10-5
SELECT * FROM TABLE
(TO_DATE(‘2007/9/1’,’yyyy/mm/dd’) BETWEEN CGGC_STRATDATE
AND CGGC_ENDDATE OR CGGC_STRATDATE >=TO_DATE(‘2007/9/1’,’yyyy/mm/dd’)
AND CGGC_ENDDATE<=TO_DATE(‘2007/9/30’,’yyyy/mm/dd’) ”
OR TO_DATE(‘2007/9/30’,’yyyy/mm/dd’) BETWEEN CGGC_STRATDATE
AND CGGC_ENDDATE) ORDER BY CGGC_STRATDATE ASC
//本年度,用ToString的字符格式化我们也很容易地算出本年度的第一天和最后一天
DateTime.Parse(DateTime.Now.ToString(“yyyy-01-01”)).ToShortDateString();
DateTime.Parse(DateTime.Now.ToString(“yyyy-01-01”)).AddYears(1).AddDays(-1).ToShortDateString();
//上年度,不用再解释了吧
DateTime.Parse(DateTime.Now.ToString(“yyyy-01-01”)).AddYears(-1).ToShortDateString();
DateTime.Parse(DateTime.Now.ToString(“yyyy-01-01”)).AddDays(-1).ToShortDateString();
//下年度
DateTime.Parse(DateTime.Now.ToString(“yyyy-01-01”)).AddYears(1).ToShortDateString();
DateTime.Parse(DateTime.Now.ToString(“yyyy-01-01”)).AddYears(2).AddDays(-1).ToShortDateString();
//本季度,很多人都会觉得这里难点,需要写个长长的过程来判断。其实不用的,我们都知道一年四个季度,一个季度三个月
//首先我们先把日期推到本季度第一个月,然后这个月的第一天就是本季度的第一天了
DateTime.Now.AddMonths(0 - ((DateTime.Now.Month - 1) % 3)).ToString(“yyyy-MM-01”);
//同理,本季度的最后一天就是下季度的第一天减一
DateTime.Parse(DateTime.Now.AddMonths(3 - ((DateTime.Now.Month - 1) % 3)).ToString(“yyyy-MM-01”)).AddDays(-1).ToShortDateString();
//下季度
DateTime.Now.AddMonths(3 - ((DateTime.Now.Month - 1) % 3)).ToString(“yyyy-MM-01”);
DateTime.Parse(DateTime.Now.AddMonths(6 - ((DateTime.Now.Month - 1) % 3)).ToString(“yyyy-MM-01”)).AddDays(-1).ToShortDateString();
//上季度
DateTime.Now.AddMonths(-3 - ((DateTime.Now.Month - 1) % 3)).ToString(“yyyy-MM-01”);
DateTime.Parse(DateTime.Now.AddMonths(0 - ((DateTime.Now.Month - 1) % 3)).ToString(“yyyy-MM-01”)).AddDays(-1).ToShortDateString();
//如何获得当月有多少天
int m=System.DateTime.DaysInMonth(System.DateTime.Now.Year,System.DateTime.Now.Month);
//获取某月的实际工作日(即不包括周六日)
//调用
//int days =getDays(System.DateTime.Now));
private int getDays(System.DateTime date1)
{
int m=System.DateTime.DaysInMonth(date1.Year,date1.Month);
int mm=0;
for(int i=1;i<=m;i++)
{
System.DateTime date=Convert.ToDateTime(date1.Year+”-“+date1.Month+”-“+i);
switch (date.DayOfWeek)
{
case System.DayOfWeek.Monday:
case System.DayOfWeek.Thursday:
case System.DayOfWeek.Tuesday:
case System.DayOfWeek.Wednesday:
case System.DayOfWeek.Friday:
mm=mm+1;
break;
}
}
return mm;
}

获得任意两日期之间的有效工作日(不包括周六日) 获得任意两日期之间的有效工作日(不包括周六日)#region 获得任意两日期之间的有效工作日(不包括周六日)

//调用
//DateTime date1=Convert.ToDateTime(“2005-10-20”);
//DateTime date2=Convert.ToDateTime(“2005-11-01”);
//int days =getDays(date1,date2);
private int getDays(System.DateTime date1,System.DateTime date2)
{
string m=DateDiff(EnumDateCompare.day,date1,date2).ToString(“f0”);

        int mm=0;
        for(int i=0;i<=Convert.ToInt32(m);i++)
        {
            System.DateTime date=Convert.ToDateTime(date1.AddDays(i));
            switch (date.DayOfWeek)
            {
                case System.DayOfWeek.Monday:
                case System.DayOfWeek.Thursday:
                case System.DayOfWeek.Tuesday:
                case System.DayOfWeek.Wednesday:
                case System.DayOfWeek.Friday:
                    mm=mm+1;
                    break;
            }                
        }
        return mm;
    }
    #endregion
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

格式输出
格式输出#region 格式输出
private void Page_Load(object sender, System.EventArgs e)
{
System.Globalization.DateTimeFormatInfo myDTFI = new System.Globalization.CultureInfo( “en-US”, false ).DateTimeFormat;
//中国用zh-cn
DateTime myDT =System.DateTime.Now;
Response.Write(myDT.ToString(“f”,myDTFI));
/////*//
This code produces the following output.
FORMAT en-US EXAMPLE
CHAR VALUE OF ASSOCIATED PROPERTY, IF ANY
d 1/3/2002 M/d/yyyy (ShortDatePattern)
D Thursday, January 03, 2002 dddd, MMMM dd, yyyy (LongDatePattern)
f Thursday, January 03, 2002 12:00 AM
F Thursday, January 03, 2002 12:00:00 AM dddd, MMMM dd, yyyy h:mm:ss tt (FullDateTimePattern)
g 1/3/2002 12:00 AM
G 1/3/2002 12:00:00 AM
m January 03 MMMM dd (MonthDayPattern)
M January 03 MMMM dd (MonthDayPattern)
r Thu, 03 Jan 2002 00:00:00 GMT ddd, dd MMM yyyy HH’:’mm’:’ss ‘GMT’ (RFC1123Pattern)
R Thu, 03 Jan 2002 00:00:00 GMT ddd, dd MMM yyyy HH’:’mm’:’ss ‘GMT’ (RFC1123Pattern)
s 2002-01-03T00:00:00 yyyy’-‘MM’-‘dd’T’HH’:’mm’:’ss (SortableDateTimePattern)
t 12:00 AM h:mm tt (ShortTimePattern)
T 12:00:00 AM h:mm:ss tt (LongTimePattern)
u 2002-01-03 00:00:00Z yyyy’-‘MM’-‘dd HH’:’mm’:’ss’Z’ (UniversalSortableDateTimePattern)
U Thursday, January 03, 2002 8:00:00 AM
y January, 2002 MMMM, yyyy (YearMonthPattern)
Y January, 2002 MMMM, yyyy (YearMonthPattern)
*/
}

endregion

获得本周的周六和周日
ConvertDateToWeek#region ConvertDateToWeek
public static void ConvertDateToWeek(DateTime date,out DateTime firstdate,out DateTime lastdate)
{
DateTime first=System.DateTime.Now;
DateTime last=System.DateTime.Now;
switch (date.DayOfWeek)
{ case System.DayOfWeek.Monday:
first=date.AddDays(-1);
last=date.AddDays(5);
break;
case System.DayOfWeek.Tuesday:
first=date.AddDays(-2);
last=date.AddDays(4);
break;
case System.DayOfWeek.Wednesday:
first=date.AddDays(-3);
last=date.AddDays(3);
break;
case System.DayOfWeek.Thursday:
first=date.AddDays(-4);
last=date.AddDays(2);
break;
case System.DayOfWeek.Friday:
first=date.AddDays(-5);
last=date.AddDays(1);
break;
case System.DayOfWeek.Saturday:
first=date.AddDays(-6);
last=date;
break;
case System.DayOfWeek.Sunday:
first=date;
last=date.AddDays(6);
break;
}
firstdate=first;
lastdate=last;
}

endregion

//调用
DateTime firstdate=System.DateTime.Now;
DateTime lastdate=System.DateTime.Now;
ConvertDateToWeek(date,out firstdate,out lastdate);
获得当前日期是该年度的第几周
DateTime dt = Convert.ToDateTime(“2006-05-01”);
int weeks = dt.DayOfYear / 7 + 1;

原文链接http://www.manew.com/blog-1121-845.html

 

 

C# DateTime日期格式化

在C#中DateTime是一个包含日期、时间的类型,此类型通过ToString()转换为字符串时,可根据传入给Tostring()的参数转换为多种字符串格式。

目录

1. 分类

2. 制式类型

3. 自定义格式类型 

1. 分类

DateTime调用ToString()传入的参数可分为制式和自定义两种:

1) 制式:系统自带的,转入特定的单个字符就可转换为系统已设定好的格式。

2) 自定义:自由组合日期代码(y、M、d、h、m、s、f)来展示丰富的日期格式。

 

2. 制式类型

说明:转入特定的单个字符就可转换为系统已设定好的格式。

2.1 格式来源

在Windows系统中的区域和语言(位置:控制面板 → 区域和语言)选项中可设置日期和时间的格式。

可设置的分类有:短日期、长日期、短时间、长时间等。

调用ToString()进行转换时,许多转换方式都是通过上面的4个分类进行组合。

2.2 符号对照表

2.2.1 环境

.net版本:4.0

系统版本:Win7

格式信息

 

2.2.2 对照表

      符号       语法   示例(2016-05-09 13:09:55:2350) 格式说明
y DateTime.Now.ToString() 2016/5/9 13:09:55 短日期 长时间
d DateTime.Now.ToString("d") 2016/5/9 短日期
D DateTime.Now.ToString("D") 2016年5月9日 长日期
f DateTime.Now.ToString("f") 2016年5月9日 13:09 长日期 短时间
F DateTime.Now.ToString("F") 2016年5月9日 13:09:55 长日期 长时间
g DateTime.Now.ToString("g") 2016/5/9 13:09 短日期 短时间
G DateTime.Now.ToString("G")  2016/5/9 13:09:55 短日期 长时间
t DateTime.Now.ToString("t") 13:09 短时间
T DateTime.Now.ToString("T") 13:09:55 长时间
u DateTime.Now.ToString("u") 2016-05-09 13:09:55Z  
U DateTime.Now.ToString("U") 2016年5月9日 5:09:55 本初子午线的长日期和长时间
m DateTime.Now.ToString("m") 5月9日  
M DateTime.Now.ToString("M") 5月9日  
r DateTime.Now.ToString("r") Mon, 09 May 2016 13:09:55 GMT  
R DateTime.Now.ToString("R") Mon, 09 May 2016 13:09:55 GMT  
y DateTime.Now.ToString("y") 2016年5月  
Y DateTime.Now.ToString("Y") 2016年5月  
o DateTime.Now.ToString("o") 2016-05-09T13:09:55.2350000  
O DateTime.Now.ToString("O") 2016-05-09T13:09:55.2350000         
s DateTime.Now.ToString("s") 2016-05-09T13:09:55  

 

2.3 示例图

 

2.4 win2003版本 

在Win2003默认中的无字符、d、g、G格式中会用'-'符号替代'/'符号(短日期格式为:yyyy-m-d)。

 

3. 自定义格式类型

开发人员可通过英文字符(y、M、d、h、m、s、f) 分别代替(年、月、日、时、分、秒、毫秒)来自由组合日期时间格式。

3.1 符号对照表

.net版本:4.0

系统版本:Win7

 

  符号   说明
语法 示例(2016-05-09 13:09:55:2350)
  yy 年份后两位 DateTime.Now.ToString("yy") DateTime.Now.ToString("yy"); // => 16
  yyyy 4位年份 DateTime.Now.ToString("yyyy") DateTime.Now.ToString("yyyy"); // => 2016
  MM 两位月份;单数月份前面用0填充 DateTime.Now.ToString("MM") DateTime.Now.ToString("MM"); // => 05
  dd 日数 DateTime.Now.ToString("dd") DateTime.Now.ToString("dd"); // => 09
  ddd 周几 DateTime.Now.ToString("ddd") DateTime.Now.ToString("ddd"); // => 周一
  dddd 星期几 DateTime.Now.ToString("dddd") DateTime.Now.ToString("dddd"); // => 星期一
  hh 12小时制的小时数 DateTime.Now.ToString("hh")  DateTime.Now.ToString("hh"); // => 01
  HH 24小时制的小时数 DateTime.Now.ToString("HH") DateTime.Now.ToString("HH"); // => 13
  mm 分钟数 DateTime.Now.ToString("mm") DateTime.Now.ToString("mm"); // => 09
  ss 秒数 DateTime.Now.ToString("ss") DateTime.Now.ToString("ss"); // => 55
  ff 毫秒数前2位 DateTime.Now.ToString("ff") DateTime.Now.ToString("ff"); // => 23
  fff 毫秒数前3位 DateTime.Now.ToString("fff") DateTime.Now.ToString("fff"); // => 235
  ffff 毫秒数前4位 DateTime.Now.ToString("ffff") DateTime.Now.ToString("ffff"); // => 2350
  分隔符

可使用分隔符来分隔年月日时分秒。

包含的值可为:-、/、:等非关键字符

DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff"); // => 2016-05-09 13:09:55:2350

DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss:ffff"); // => 2016/05/09 13:09:55:2350

DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss:ffff dddd"); // => 2016/05/09 13:09:55:2350 星期一

 

3.2 示例图

 

 

原文转自:https://www.cnblogs.com/polk6/p/5465088.html#Menu3-Custom

posted @ 2019-10-08 17:12  自長安的李少俠  阅读(261)  评论(0编辑  收藏  举报