百分百有效的时间格式化处理方案_C#
- Format 格式化输出
- C#日期转化
- 比较两个时间的大小
- 计算时间差
Format 格式化输出
string.Format();
项目 | value |
格式字符 | 关联属性/说明 |
d | ShortDatePattern |
D | LongDatePattern |
f | 完整日期和时间(长日期和短时间) |
F | FullDateTimePattern(长日期和长时间) |
g | 常规(短日期和短时间) |
G | 常规(短日期和长时间) |
m、M | MonthDayPattern |
r、R | RFC1123Pattern |
s | 使用当地时间的 SortableDateTimePattern(基于 ISO 8601) |
t | ShortTimePattern |
T | LongTimePattern |
u | UniversalSortableDateTimePattern 用于显示通用时间的格式 |
U | 使用通用时间的完整日期和时间(长日期和长时间) |
y、Y | YearMonthPattern |
例子:
DateTime dt = DateTime.Now;
// 时间格式 yyyy/MM/dd
string time1 = string.Format("{0:d}",dt);
Console.WriteLine(time1);// 2020/10/31
// 时间格式 yyyy年MM月dd日
string time2 = string.Format("{0:D}",dt);
Console.WriteLine(time2);// 2020年10月31日
// 时间格式 yyyy年MM月
string time3 = string.Format("{0:Y}",dt);
Console.WriteLine(time4);// 2020年10月
// 时间格式 yyyy年MM月dd日 h:mm
string time4 = string.Format("{0:f}",dt);
Console.WriteLine(time4);// 2020年10月31日 9:15
// 时间格式 yyyy年MM月dd日 h:mm:ss
string time5 = string.Format("{0:F}",dt);
Console.WriteLine(time5);// 2020年10月31日 9:18:25
// 时间格式 MM月dd日
string time6 = string.Format("{0:M}",dt);
Console.WriteLine(time6);// 10月31日
// 时间格式 yyyy/MM/dd h:mm
string time7 = string.Format("{0:g}",dt);
Console.WriteLine(time7);// 2020/10/31 9:19
// 时间格式 yyyy/MM/dd h:mm:ss
string time8 = string.Format("{0:G}",dt);
Console.WriteLine(time8);// 2020/10/31 9:22:21
// 时间格式 mm:ss
string time9 = string.Format("{0:t}",dt);
Console.WriteLine(time9);// 9:25
// 时间格式 h:mm:ss
string time10 = string.Format("{0:T}",dt);
Console.WriteLine(time10);// 9:25:28
// 时间格式 yyyy-MM-dd h:mm:ss Z(中国)
string time11 = string.Format("{0:u}",dt);
Console.WriteLine(time11);// 2020-10-31 09:25:47Z
// 时间格式 yyyy年MM月dd日 h:mm:ss (通用)
string time12 = string.Format("{0:U}",dt);
Console.WriteLine(time12);// 2020年10月31日 1:26:01
string time13 = string.Format("{0:R}",dt);
Console.WriteLine(time13);// Sat, 31 Oct 2020 09:23:45 GMT
string time14 = string.Format("{0:s}",dt);
Console.WriteLine(time14);// 2020-10-31T09:24:21
string time15 = string.Format("{0}",dt);
Console.WriteLine(time15);// 2020/10/31 10:01:36
string time16 = string.Format("{0:yyyyMMddHHmmssffff}",dt);
Console.WriteLine(time16);// 202010311002533500
下表列出了可被合并以构造自定义模式的模式。这些模式是区分大小写的;例如,识别“MM”,但不识别“mm”。如果自定义模式包含空白字符或用单引号括起来的字符,则输出字符串页也将包含这些字符。未定义为格式模式的一部分或未定义为格式字符的字符按其原义复制
格式模式 | 说明 |
d 月中的某一天 | 一位数的日期没有前导零 |
dd 月中的某一天 | 一位数的日期有一个前导零 |
ddd 周中某天的缩写名称 | 在 AbbreviatedDayNames 中定义 |
dddd 周中某天的完整名称 | 在 DayNames 中定义 |
M 月份数字 | 一位数的月份没有前导零 |
MM 月份数字 | 一位数的月份有一个前导零 |
MMM 月份的缩写名称 | 在 AbbreviatedMonthNames 中定义 |
MMMM 月份的完整名称 | 在 MonthNames 中定义 |
y 不包含纪元的年份 | 如果不包含纪元的年份小于 10,则显示不具有前导零的年份 |
yy 不包含纪元的年份 | 如果不包含纪元的年份小于 10,则显示具有前导零的年份 |
yyyy | 包括纪元的四位数的年份 |
gg 时期或纪元 | 如果要设置格式的日期不具有关联的时期或纪元字符串,则忽略该模式 |
h 12 小时制的小时 | 一位数的小时数没有前导零 |
hh 12 小时制的小时 | 一位数的小时数有前导零 |
H 24 小时制的小时 | 一位数的小时数没有前导零 |
HH 24 小时制的小时 | 一位数的小时数有前导零 |
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 是任意字符 | 照原义显示字符。若要显示反斜杠字符,请使用“\” |
只有上面第二个表中列出的格式模式才能用于创建自定义模式;在第一个表中列出的标准格式字符不能用于创建自定义模式。自定义模式的长度至少为两个字符;例如,
DateTime.ToString("d")
返回 DateTime 值;“d”是标准短日期模式。
DateTime.ToString("%d")
返回月中的某天;“%d”是自定义模式。
DateTime.ToString("d ")
返回后面跟有一个空白字符的月中的某天;“d”是自定义模式。
- 比较方便的是,上面的参数可以随意组合,并且不会出错,多试试,肯定会找到你要的时间格式
C#日期转化
DateTime dt = DateTime.Now;
dt.ToString();// 2020-10-31 10:10:25
dt.ToFileTime().ToString();// 132485838882683121
dt.ToFileTimeUtc().ToString();// 132485839117600286
dt.ToLocalTime().ToString();// 2020/10/31 10:12:08
dt.ToLongDateString().ToString();// 2020年10月31日
dt.ToLongTimeString().ToString();// 10:13:10
dt.ToOADate().ToString();// 44135.4260169097
dt.ToShortDateString().ToString();// 2020/10/31
dt.ToShortTimeString().ToString();// 10:14
dt.ToUniversalTime().ToString();// 2020/10/31 2:14:19
dt.Year.ToString();// 2020
dt.Date.ToString();// 2020/10/31 0:00:00
dt.DayOfWeek.ToString();// Saturday
dt.DayOfYear.ToString();// 305
dt.Hour.ToString();// 10
dt.Millisecond.ToString();// 53
dt.Minute.ToString();// 16
dt.Month.ToString();// 10
dt.Second.ToString();// 10
dt.Ticks.ToString();// 637397362366997334
dt.TimeOfDay.ToString();// 10:17:34.1632189
dt.ToString();// 2020/10/31 10:17:52
dt.AddYears(1).ToString();// 2021/10/31 10:18:09
dt.AddDays(1.1).ToString();// 2020/11/1 12:42:26
dt.AddHours(1.1).ToString();// 2020/10/31 11:24:43
dt.AddMilliseconds(1.1).ToString();// 2020/10/31 10:19:30
dt.AddMonths(1).ToString();// 2020/11/30 10:19:49
dt.AddSeconds(1.1).ToString();// 2020/10/31 10:20:07
dt.AddMinutes(1.1).ToString();// 2020/10/31 10:21:31
dt.AddTicks(1000).ToString();// 2020/10/31 10:20:45
dt.CompareTo(dt).ToString();// 0
dt.Add(?).ToString();// 问号为一个时间段
dt.Equals("2020-10-31 16:11:04").ToString();//False
dt.Equals(dt).ToString();// True
dt.GetHashCode().ToString();// -283369369
dt.GetType().ToString();// System.DateTime
dt.GetTypeCode().ToString();// DateTime
dt.GetDateTimeFormats('s')[0].ToString();// 2020-10-31T10:23:45
dt.GetDateTimeFormats('t')[0].ToString();// 10:24
dt.GetDateTimeFormats('y')[0].ToString();// 2020年10月
dt.GetDateTimeFormats('D')[0].ToString();// 2020年10月31日
dt.GetDateTimeFormats('D')[1].ToString();// 2020年10月31日, 星期六
dt.GetDateTimeFormats('D')[2].ToString();// 星期六, 2020年10月31日
dt.GetDateTimeFormats('D')[3].ToString();// 2020年10月31日
dt.GetDateTimeFormats('M')[0].ToString();// 10月31日
dt.GetDateTimeFormats('f')[0].ToString();// 2020年10月31日 10:25
dt.GetDateTimeFormats('g')[0].ToString();// 2020/10/31 10:26
dt.GetDateTimeFormats('r')[0].ToString();// Sat, 31 Oct 2020 10:26:27 GMT
比较两个时间的大小
using System;
namespace dateTime
{
class Program
{
static void Main(string[] args)
{
string st1 = "12:13";
string st2 = "14:14";
TimeRatioSize(st1, st2);
}
/// <summary>
/// 比较两个时间的大小
/// </summary>
/// <param name="st1"></param>
/// <param name="st2"></param>
public static void TimeRatioSize(string st1, string st2)
{
string msg;
DateTime dt1 = Convert.ToDateTime(st1);
DateTime dt2 = Convert.ToDateTime(st2);
DateTime dt3 = DateTime.Now;
if (DateTime.Compare(dt1, dt2) > 0)
msg = st1 + ">" + st2;
else
msg = st1 + "<" + st2;
msg += "\r\n" + dt1.ToString();
if (DateTime.Compare(dt1, dt3) > 0)
msg += "\r\n" + st1 + ">" + dt3.ToString();
else
msg += "\r\n" + st1 + "<" + dt3.ToString();
Console.WriteLine(msg);
}
}
}
计算时间差
public static void DateDiff(DateTime T1, DateTime T2)
{
string dateDiff;
TimeSpan ts1 = new TimeSpan(T1.Ticks);
TimeSpan ts2 = new TimeSpan(T2.Ticks);
TimeSpan ts = ts1.Subtract(ts2).Duration();
dateDiff = string.Format("{0}天{1}小时{2}分钟{3}秒",
ts.Days.ToString(), ts.Hours.ToString(), ts.Minutes.ToString(), ts.Seconds.ToString());
Console.WriteLine(dateDiff);
}