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 类中的 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
  yyyy4位年份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"); // => 星期一
  hh12小时制的小时数DateTime.Now.ToString("hh") DateTime.Now.ToString("hh"); // => 01
  HH24小时制的小时数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)格式说明
yDateTime.Now.ToString()2016/5/9 13:09:55短日期 长时间
dDateTime.Now.ToString("d")2016/5/9短日期
DDateTime.Now.ToString("D")2016年5月9日长日期
fDateTime.Now.ToString("f")2016年5月9日 13:09长日期 短时间
FDateTime.Now.ToString("F")2016年5月9日 13:09:55长日期 长时间
gDateTime.Now.ToString("g")2016/5/9 13:09短日期 短时间
GDateTime.Now.ToString("G") 2016/5/9 13:09:55短日期 长时间
tDateTime.Now.ToString("t")13:09短时间
TDateTime.Now.ToString("T")13:09:55长时间
uDateTime.Now.ToString("u")2016-05-09 13:09:55Z 
UDateTime.Now.ToString("U")2016年5月9日 5:09:55本初子午线的长日期和长时间
mDateTime.Now.ToString("m")5月9日 
MDateTime.Now.ToString("M")5月9日 
rDateTime.Now.ToString("r")Mon, 09 May 2016 13:09:55 GMT 
RDateTime.Now.ToString("R")Mon, 09 May 2016 13:09:55 GMT 
yDateTime.Now.ToString("y")2016年5月 
YDateTime.Now.ToString("Y")2016年5月 
oDateTime.Now.ToString("o")2016-05-09T13:09:55.2350000 
ODateTime.Now.ToString("O")2016-05-09T13:09:55.2350000        
sDateTime.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
  yyyy4位年份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"); // => 星期一
  hh12小时制的小时数DateTime.Now.ToString("hh") DateTime.Now.ToString("hh"); // => 01
  HH24小时制的小时数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

01-26 04:52
查看更多