using System;
using System.Text;
namespace CommonHelper
{
public static class ExtDateTime
{
///
/// 获取格式化字符串,不带时分秒。格式:"yyyy-MM-dd"
///
/// 日期
public static string ToDateString(this DateTime dateTime)
{
return dateTime.ToString("yyyy-MM-dd");
}
///
/// 获取格式化字符串,不带时分秒。格式:"yyyy-MM-dd"
///
/// 日期
public static string ToDateString(this DateTime? dateTime)
{
if (dateTime == null)
{
return string.Empty;
}
return ToDateString(dateTime.Value);
}
///
/// 获取格式化字符串,不带年月日,格式:"HH:mm:ss"
///
/// 日期
public static string ToTimeString(this DateTime dateTime)
{
return dateTime.ToString("HH:mm:ss");
}
///
/// 获取格式化字符串,不带年月日,格式:"HH:mm:ss"
///
/// 日期
public static string ToTimeString(this DateTime? dateTime)
{
if (dateTime == null)
{
return string.Empty;
}
return ToTimeString(dateTime.Value);
}
///
/// 获取格式化字符串,带毫秒,格式:"yyyy-MM-dd HH:mm:ss.fff"
///
/// 日期
public static string ToMillisecondString(this DateTime dateTime)
{
return dateTime.ToString("yyyy-MM-dd HH:mm:ss.fff");
}
///
/// 获取格式化字符串,带毫秒,格式:"yyyy-MM-dd HH:mm:ss.fff"
///
/// 日期
public static string ToMillisecondString(this DateTime? dateTime)
{
if (dateTime == null)
{
return string.Empty;
}
return ToMillisecondString(dateTime.Value);
}
///
/// 获取格式化字符串,不带时分秒,格式:"yyyy年MM月dd日"
///
/// 日期
public static string ToChineseDateString(this DateTime dateTime)
{
return string.Format("{0}年{1}月{2}日", dateTime.Year, dateTime.Month, dateTime.Day);
}
///
/// 获取格式化字符串,带时分秒,格式:"yyyy年MM月dd日 HH时mm分"
///
/// 日期
/// 是否移除秒
public static string ToChineseDateTimeString(this DateTime dateTime, bool isRemoveSecond = false)
{
StringBuilder result = new StringBuilder(50);
result.AppendFormat("{0}年{1}月{2}日", dateTime.Year, dateTime.Month, dateTime.Day);
result.AppendFormat(" {0}时{1}分", dateTime.Hour, dateTime.Minute);
if (isRemoveSecond == false)
{
result.AppendFormat("{0}秒", dateTime.Second);
}
return result.ToString();
}
///
/// 获取格式化字符串,带时分秒,格式:"yyyy年MM月dd日 HH时mm分"
///
/// 日期
/// 是否移除秒
public static string ToChineseDateTimeString(this DateTime? dateTime, bool isRemoveSecond = false)
{
if (dateTime == null)
{
return string.Empty;
}
return ToChineseDateTimeString(dateTime.Value);
}
///
/// 返回指定日期起始时间。
///
///
///
public static DateTime StartDateTime(this DateTime dateTime)
{
if (dateTime == null)
{
throw new ArgumentNullException();
}
return new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, 0, 0, 0);
}
///
/// 返回指定日期结束时间。
///
///
///
public static DateTime EndDateTime(this DateTime dateTime)
{
if (dateTime == null)
{
throw new ArgumentNullException();
}
return new DateTime(dateTime.Year, dateTime.Month, dateTime.Day, 23, 59, 59);
}
///
/// 获取时间戳
///
/// 时间
/// 是否毫秒级,true毫秒级(默认值)
///
public static long ToTimestamp(this DateTime dt, bool millisecond = true)
{
/*
* ticks的单位是100纳秒,1 Tick=100纳秒,所以需要除以10000000(秒),10000(毫秒)
* s(秒),ms(毫秒),μs(微秒),ns(纳秒),1s=1000ms,1 ms=1000μs,1μs=1000ns
*/
TimeSpan ts = DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0);
if(millisecond)
return Convert.ToInt64(ts.TotalMilliseconds);
else
return Convert.ToInt64(ts.TotalSeconds);
}
///
/// 时间戳转换成时间,返回NULL则说明转换失败(如时间戳无效)
///
/// 时间戳
/// 是否毫秒级,true毫秒级(默认值)
/// 是否输出本地时间,true本地时间(默认值)
///
public static DateTime? ToDateTime(this long timestamp, bool millisecond = true)
{
try
{
if(millisecond)
return (new System.DateTime(1970, 1, 1, 0, 0, 0, 0)).AddMilliseconds(timestamp).ToLocalTime();
else
return (new System.DateTime(1970, 1, 1, 0, 0, 0, 0)).AddSeconds(timestamp).ToLocalTime();
}
catch
{
return null;
}
}
///
/// 时间戳转换成时间
///
/// 时间戳
/// 是否毫秒级,true毫秒级(默认值)
/// 是否输出本地时间,true本地时间(默认值)
///
public static DateTime? ToDateTime(this string timestamp)
{
if (long.TryParse(timestamp, out long ts))
{
var isM = true;
if (timestamp.Length == 10)
isM = false;
return ts.ToDateTime(isM);
}
return null;
}
}
}