using System;
using System.Text;
namespace CommonUtil
{
///
/// 扩展方法工具类/日期
///
public static partial class ExtendUtil
{
///
/// 转换为日期,null会转为DateTime最小值
///
/// 数据
/// 日期
public static DateTime ToDateTime(this string data)
{
if (data.IsNullOrEmpty())
{
return DateTime.MinValue;
}
return DateTime.TryParse(data, out DateTime result) ? result : DateTime.MinValue;
}
///
/// 转换为可空日期
///
/// 数据
/// 可空日期
public static DateTime? ToDatetimeOrNull(this string data)
{
if (data.IsNullOrEmpty())
{
return null;
}
return DateTime.TryParse(data, out DateTime result) ? (DateTime?)result : null;
}
///
/// 获取格式化时间字符串,带时分秒,格式:yyyy/MM/dd HH:mm:ss
///
/// 日期
/// 是否移除秒
/// yyyy/MM/dd HH:mm:ss
public static string ToDateTimeString(this DateTime dateTime, bool isRemoveSecond = false)
{
if (isRemoveSecond)
{
return dateTime.ToString("yyyy/MM/dd HH:mm");
}
else
{
return dateTime.ToString("yyyy/MM/dd HH:mm:ss");
}
}
///
/// 获取格式化时间字符串,带时分秒,格式:yyyy/MM/dd HH:mm:ss
///
/// 日期
/// yyyy/MM/dd HH:mm:ss
public static string ToDateTimeStringWithOutMinute(this DateTime dateTime)
{
return dateTime.ToString("yyyy/MM/dd HH");
}
///
/// 获取格式化时间字符串,带时分秒,格式:yyyy/MM/dd HH:mm:ss
///
/// 日期
/// 是否移除秒
/// yyyy/MM/dd HH:mm:ss
public static string ToDateTimeString(this DateTime? dateTime, bool isRemoveSecond = false)
{
return dateTime.HasValue ? ToDateTimeString(dateTime.Value, isRemoveSecond) : string.Empty;
}
///
/// 获取格式化时间字符串,不带时分秒,格式:yyyy/MM/dd
///
/// 日期
/// yyyy/MM/dd
public static string ToDateString(this DateTime dateTime)
{
return dateTime.ToString("yyyy/MM/dd");
}
///
/// 获取格式化时间字符串,不带时分秒,格式:yyyy/MM/dd
///
/// 日期
/// yyyy/MM/dd
public static string ToDateString(this DateTime? dateTime)
{
return dateTime.HasValue ? ToDateString(dateTime.Value) : string.Empty;
}
///
/// 获取格式化时间字符串,不带年月日,格式:HH:mm:ss
///
/// 日期
/// HH:mm:ss
public static string ToTimeString(this DateTime dateTime)
{
return dateTime.ToString("HH:mm:ss");
}
///
/// 获取格式化时间字符串,不带年月日,格式:HH:mm:ss
///
/// 日期
/// HH:mm:ss
public static string ToTimeString(this DateTime? dateTime)
{
return dateTime.HasValue ? ToTimeString(dateTime.Value) : string.Empty;
}
///
/// 获取格式化字符串,带毫秒,格式:yyyy/MM/dd HH:mm:ss.fff
///
/// 日期
/// 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
///
/// 日期
/// yyyy/MM/dd HH:mm:ss.fff
public static string ToMillisecondString(this DateTime? dateTime)
{
return dateTime.HasValue ? ToMillisecondString(dateTime.Value) : string.Empty;
}
///
/// 获取格式化字符串,不带时分秒,格式:yyyy年MM月dd日
///
/// 日期
/// yyyy年MM月dd日
public static string ToCNDateString(this DateTime dateTime)
{
return string.Format("{0}年{1}月{2}日", dateTime.Year, dateTime.Month, dateTime.Day);
}
///
/// 获取格式化字符串,不带时分秒,格式:yyyy年MM月dd日
///
/// 日期
/// yyyy年MM月dd日
public static string ToCNDateString(this DateTime? dateTime)
{
return dateTime.HasValue ? ToCNDateString(dateTime.Value) : string.Empty;
}
///
/// 获取格式化字符串,带时分秒,格式:yyyy年MM月dd日 HH时mm分ss秒
///
/// 日期
/// 是否移除秒
/// yyyy年MM月dd日 HH时mm分ss秒
public static string ToCNDateTimeString(this DateTime dateTime, bool isRemoveSecond = false)
{
StringBuilder result = new StringBuilder();
result.AppendFormat("{0}年{1}月{2}日", dateTime.Year, dateTime.Month, dateTime.Day);
result.AppendFormat(" {0}时{1}分", dateTime.Hour, dateTime.Minute);
if (!isRemoveSecond)
{
result.AppendFormat("{0}秒", dateTime.Second);
}
return result.ToString();
}
///
/// 获取格式化字符串,带时分秒,格式:yyyy年MM月dd日 HH时mm分ss秒
///
/// 日期
/// 是否移除秒
/// yyyy年MM月dd日 HH时mm分ss秒
public static string ToCNDateTimeString(this DateTime? dateTime, bool isRemoveSecond = false)
{
return dateTime.HasValue ? ToCNDateTimeString(dateTime.Value, isRemoveSecond) : string.Empty;
}
///
/// 将Unix时间戳转换为DateTime类型时间
///
/// 整型数字
/// DateTime
public static DateTime ToDateTimeSeconds(this long unixTime)
{
var dto = DateTimeOffset.FromUnixTimeSeconds(unixTime);
return dto.ToLocalTime().DateTime;
}
///
/// 将Unix时间戳转换为DateTime类型时间
///
/// 整型数字
/// DateTime
public static DateTime ToDateTime(this long unixTime)
{
var dto = DateTimeOffset.FromUnixTimeMilliseconds(unixTime);
return dto.ToLocalTime().DateTime;
}
///
/// 将DateTime时间格式转换为Unix时间戳格式
///
/// 时间
/// long
public static long EncodeUnix(this DateTime time)
{
return new DateTimeOffset(time).ToUnixTimeSeconds();
}
///
/// 将DateTime时间格式转换为Unix时间戳格式(毫秒)
///
/// DateTime时间
/// long
public static long EncodeUnixMillisecond(this DateTime time)
{
return new DateTimeOffset(time).ToUnixTimeMilliseconds();
}
///
/// 获取指定星期的日期
///
/// 时间
/// 星期
/// 下周:1,下下周:2,上周:0
/// DateTime
public static DateTime GetWeekUpOfDate(this DateTime dt, int weekday, int Number)
{
int wd1 = weekday;
int wd2 = (int)dt.DayOfWeek;
return wd2 == wd1 ? dt.AddDays(7 * Number) : dt.AddDays(7 * Number / wd2 + wd1);
}
}
}