C# DateTime 日期时间

介绍

DateTime 不是类,是结构体

官网:
https://learn.microsoft.com/zh-cn/dotnet/api/system.datetime?view=netframework-4.6.1

创建对象

当前时间

DateTime now = DateTime.Now;

指定年月日时分秒

DateTime dateTime = new DateTime(yearInt, monthInt,dayInt,hourInt,minuteInt,secondInt);

获取年月日时分秒

DateTime now = DateTime.Now;

now.Year
now.Month
now.Day
now.Hour
now.Minute
now.Second

对象格式化成字符串

DateTime.Now.ToString("yyyy-MM-dd");        // 2019-09-04

DateTime.Now.ToString("hh:mm:ss");        // 08:05:57

字符串格式成对象

方法一:Convert.ToDateTime(string)

string格式有要求,必须是yyyy-MM-dd hh:mm:ss

方法二:Convert.ToDateTime(string, IFormatProvider)

DateTime dt;
DateTimeFormatInfo dtFormat = new System.GlobalizationDateTimeFormatInfo();
dtFormat.ShortDatePattern = "yyyy/MM/dd";
dt = Convert.ToDateTime("2011/05/26", dtFormat);

方法三:DateTime.ParseExact()

string dateString = "20110526";
DateTime dt = DateTime.ParseExact(dateString, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture);
C# string.Format格式化日期
DateTime dt = new DateTime(2017,4,1,13,16,32,108);
string.Format("{0:y yy yyy yyyy}",dt); //17 17 2017 2017
string.Format("{0:M MM MMM MMMM}", dt);//4  04 四月 四月
string.Format("{0:d dd ddd dddd}", dt);//1  01 周六 星期六
string.Format("{0:t tt}", dt);//下 下午
string.Format("{0:H HH}", dt);//13 13
string.Format("{0:h hh}", dt);//1  01
string.Format("{0:m mm}", dt);//16 16
string.Format("{0:s ss}", dt);//32 32
string.Format("{0:F FF FFF FFFF FFFFF FFFFFF FFFFFFF}", dt);//1 1  108 108  108   108    108
string.Format("{0:f ff fff ffff fffff ffffff fffffff}", dt);//1 10 108 1080 10800 108000 1080000
string.Format("{0:z zz zzz}", dt);//+8 +08 +08:00

string.Format("{0:yyyy/MM/dd HH:mm:ss.fff}",dt);  //2017/04/01 13:16:32.108
string.Format("{0:yyyy/MM/dd dddd}", dt);      //2017/04/01 星期六
string.Format("{0:yyyy/MM/dd dddd tt hh:mm}", dt); //2017/04/01 星期六 下午 01:16
string.Format("{0:yyyyMMdd}", dt);         //20170401
string.Format("{0:yyyy-MM-dd HH:mm:ss.fff}", dt); //2017-04-01 13:16:32.108
除去string.Format()可以对日期进行格式化之外,*.ToString()也可以实现相同的效果:

DateTime dt = new DateTime(2017,4,1,13,16,32,108);
dt.ToString("y yy yyy yyyy");//17 17 2017 2017
dt.ToString("M MM MMM MMMM");//4  04 四月 四月
dt.ToString("d dd ddd dddd");//1  01 周六 星期六
dt.ToString("t tt");//下 下午
dt.ToString("H HH");//13 13
dt.ToString("h hh");//1  01
dt.ToString("m mm");//16 16
dt.ToString("s ss");//32 32
dt.ToString("F FF FFF FFFF FFFFF FFFFFF FFFFFFF");//1 1  108 108  108   108    108
dt.ToString("f ff fff ffff fffff ffffff fffffff");//1 10 108 1080 10800 108000 1080000
dt.ToString("z zz zzz");//+8 +08 +08:00

dt.ToString("yyyy/MM/dd HH:mm:ss.fff"); //2017/04/01 13:16:32.108
dt.ToString("yyyy/MM/dd dddd");      //2017/04/01 星期六
dt.ToString("yyyy/MM/dd dddd tt hh:mm"); //2017/04/01 星期六 下午 01:16
dt.ToString("yyyyMMdd");         //20170401
dt.ToString("yyyy-MM-dd HH:mm:ss.fff"); //2017-04-01 13:16:32.108

赋 null 值

由于 DateTime 是结构体,不能直接赋 null 值

可以用下面方法:

Nullable<DateTime> now = null;

可以缩写:

DateTime? now = null;

例子

DateTime? dt = null;

// 判断是否为null
if( dt == null )
{
    dt = DateTime.now; // 赋值
}

// 日期计算时需要强转为 DateTime
TimeSpan diff = DateTime.now - (DateTime)dt;

日期比较

支持 <,<=,>=,>

日期间隔计算

DateTime startTime = DateTime.Now;

DateTime endTime = DateTime.Now.AddHours(1);
// 时间差
TimeSpan ts = endTime - startTime;

// 时间差的间隔天数
ts.TotalDays
// 时间差间隔小时
ts.TotalHours
// 时间差间隔分钟
ts.TotalMinutes
// 时间差间隔秒数
TotalSeconds

关于 TimeSpan 详见:
https://www.malaoshi.top/show_1GW1G0j3dPoK.html

转时间戳

long timeStamp = new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds();

时间戳转 DateTime

需要指定时区,否则差8小时,这里转为本机时区

DateTime dt = DateTimeOffset.FromUnixTimeSeconds(timeStamp).UtcDateTime.ToLocalTime();

原文链接:https://blog.csdn.net/yugui/article/details/120009896

https://blog.csdn.net/chinaherolts2008/article/details/111246440