介绍
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