using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.IO;
using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;
namespace Edu.Common.Plugin
{
///
/// 字符相关辅助类
///
public class StringHelper
{
#region "随机数"
///
/// 随机生成8位随机数
///
///
public static string GenerateGuid8String()
{
string guid = GenerateGuid16String(Guid.NewGuid());
return guid.Substring(0, 8);
}
///
/// Guid to string(16)
///
public static string GenerateGuid16String()
{
return GenerateGuid16String(Guid.NewGuid());
}
///
/// Guid to string(16)
///
public static string GenerateGuid16String(Guid guid)
{
long i = 1;
foreach (byte b in guid.ToByteArray())
i *= ((int)b + 1);
return string.Format("{0:x}", i - DateTime.Now.Ticks);
}
#endregion
#region "日期相关"
public static string DateFormatToString(DateTime dt)
{
//TimeSpan表示时间间隔
TimeSpan span = (DateTime.Now - dt).Duration();//表示取timespan绝对值
//if (span.TotalDays > 60)
//{
// return dt.ToString("yyyy-MM-dd");
//}
//else if (span.TotalDays > 30)
//{
// return "1个月前";
//}
//else if (span.TotalDays > 14)
//{
// return "2周前";
//}
if (dt.Year == DateTime.Now.Year)
{
if (span.TotalDays > 7)
{
return dt.ToString("yyyy-MM-dd");
}
else if (span.TotalDays > 1)
{
return string.Format("{0}天前", (int)Math.Floor(span.TotalDays));
}
else if (span.TotalHours > 1)
{
return string.Format("{0}小时前", (int)Math.Floor(span.TotalHours));
}
else if (span.TotalMinutes > 1)
{
return string.Format("{0}分钟前", (int)Math.Floor(span.TotalMinutes));
}
else if (span.TotalSeconds >= 1)
{
return string.Format("{0}秒前", (int)Math.Floor(span.TotalSeconds));
}
else
{
return "1秒前";
}
}
else
{
return dt.ToString("yyyy-MM-dd");
}
}
///
/// 获取星期的字符串
///
/// 指定日期
///
public static string GetJapanWeekChar(DateTime day)
{
string[] str = new string[] { "日", "月", "火", "水", "木", "金", "土" };
int week = int.Parse(day.DayOfWeek.ToString("D"));
return str[week];
}
///
/// 获取星期的字符串
///
/// 指定日期
///
public static string GetWeekChar(DateTime day)
{
string[] str = new string[] { "日", "一", "二", "三", "四", "五", "六" };
int week = int.Parse(day.DayOfWeek.ToString("D"));
return "星期" + str[week];
}
///
/// 获取周几的字符串
///
/// 指定日期
///
public static string GetWeek(DateTime day)
{
string[] str = new string[] { "日", "一", "二", "三", "四", "五", "六" };
int week = int.Parse(day.DayOfWeek.ToString("D"));
return "周" + str[week];
}
///
/// 获取星期几[英文版]
///
///
///
public static string GetWeek_eg(DateTime day)
{
string[] str = new string[] { "Sun", "Mon", "Tues", "Wed", "Thu", "Fri", "Sat" };
int week = int.Parse(day.DayOfWeek.ToString("D"));
return str[week];
}
///
/// 获取星期几的字符串
///
/// 指定日期
///
public static string GetWeekDay(DateTime day)
{
string[] str = new string[] { "日", "一", "二", "三", "四", "五", "六" };
int week = int.Parse(day.DayOfWeek.ToString("D"));
return "星期" + str[week];
}
///
/// 得到两个日期总天数
///
/// 开始日期
/// 结束日期
///
public static int GetDateDayInterval(DateTime? dStart, DateTime? dEnd)
{
if (!dStart.HasValue || !dEnd.HasValue) return 0;
//TimeSpan ts = Convert.ToDateTime(dEnd.Value.ToString("yyyy-MM-dd"))-(Convert.ToDateTime(dStart.Value.ToString("yyyy-MM-dd")));
int TotalDay = 0;
while (true)
{
if (dStart.Value.ToString("yyyy-MM-dd") == dEnd.Value.ToString("yyyy-MM-dd"))
{
TotalDay += 1;
break;
}
else
{
TotalDay += 1;
}
dStart = dStart.Value.AddDays(1);
}
return TotalDay;
}
///
/// 得到两个日期之差的时间戳
///
/// 开始日期
/// 结束日期
///
public static TimeSpan GetDayTimeSpan(DateTime? dStart, DateTime? dEnd)
{
if (!dStart.HasValue || !dEnd.HasValue) return new TimeSpan();
return dEnd.Value - dStart.Value;
}
///
/// 格式化日期为字符串2018-01-01 12:00:00
///
///
///
public static string FormatDateTimeStr(object date)
{
try
{
DateTime.TryParse(date.ToString(), out DateTime dt);
return dt.ToString("yyyy-MM-dd HH:mm:ss");
}
catch
{
}
return "";
}
///
/// 格式化日期
///
///
///
public static string FormatDate(object date)
{
try
{
DateTime.TryParse(date.ToString(), out DateTime dt);
return dt.ToString("yyyy-MM-dd");
}
catch
{
}
return "";
}
///
/// 获取年份月份中的最后一天
///
/// 年份
/// 月份
///
public static DateTime GetMonthLastDay(int year, int month)
{
return new DateTime(year, month, 1).AddMonths(1).AddDays(-1);
}
///
/// 时间
///
///
///
public static string GetTypeOfMeal(DateTime? Time)
{
string returnStr = "";
if (Time.HasValue)
{
if (Time.Value.Hour < 10)
{
returnStr = "早餐";
}
else if (Time.Value.Hour >= 10 && Time.Value.Hour < 14)
{
returnStr = "午餐";
}
else
{
returnStr = "晚餐";
}
}
return returnStr;
}
///
/// 时间
///
///
///
public static string GetTypeOfTime(DateTime? Time)
{
string returnStr = "";
if (Time.HasValue)
{
if (Time.Value.Hour < 10)
{
returnStr = "早上";
}
else if (Time.Value.Hour >= 10 && Time.Value.Hour < 14)
{
returnStr = "中午";
}
else
{
returnStr = "晚上";
}
}
return returnStr;
}
///
/// 获取星期简写
///
///
///
public static string GetWeek(string value)
{
string dateStr = "";
switch (value.ToLower())
{
case "monday":
dateStr = "Mon";
break;
case "tuesday":
dateStr = "Tues";
break;
case "wednesday":
dateStr = "Wed";
break;
case "thursday":
dateStr = "Thu";
break;
case "friday":
dateStr = "Fri";
break;
case "saturday":
dateStr = "Sat";
break;
case "sunday":
dateStr = "Sun";
break;
default:
break;
}
return dateStr.ToUpper();
}
///
/// 根据日期获取星期几
///
/// 日期
///
public static int GetWeekDayNum(DateTime date)
{
int week = 1;
var dt = date.DayOfWeek.ToString();
switch (dt)
{
case "Monday":
week = 1;
break;
case "Tuesday":
week = 2;
break;
case "Wednesday":
week = 3;
break;
case "Thursday":
week = 4;
break;
case "Friday":
week = 5;
break;
case "Saturday":
week = 6;
break;
case "Sunday":
week = 7;
break;
}
return week;
}
///
/// 获取月份简写
///
///
///
public static string GetDate(string value)
{
string dateStr = "";
switch (value)
{
case "01":
dateStr = "JAN";
break;
case "02":
dateStr = "FEB";
break;
case "03":
dateStr = "MAR";
break;
case "04":
dateStr = "APR";
break;
case "05":
dateStr = "MAY";
break;
case "06":
dateStr = "JUN";
break;
case "07":
dateStr = "JUL";
break;
case "08":
dateStr = "AUG";
break;
case "09":
dateStr = "SEP";
break;
case "10":
dateStr = "OCT";
break;
case "11":
dateStr = "NOV";
break;
case "12":
dateStr = "DEC";
break;
default:
break;
}
return dateStr;
}
///
/// 取得某月的第一天
///
/// 要取得月份第一天的时间
///
public static DateTime FirstDayOfMonth(DateTime datetime)
{
return datetime.AddDays(1 - datetime.Day);
}
///
/// 取得某月的最后一天
///
/// 要取得月份最后一天的时间
///
public static DateTime LastDayOfMonth(DateTime datetime)
{
return datetime.AddDays(1 - datetime.Day).AddMonths(1).AddDays(-1);
}
///
/// 取得上个月第一天
///
/// 要取得上个月第一天的当前时间
///
public static DateTime FirstDayOfPreviousMonth(DateTime datetime)
{
return datetime.AddDays(1 - datetime.Day).AddMonths(-1);
}
///
/// 取得上个月的最后一天
///
/// 要取得上个月最后一天的当前时间
///
public static DateTime LastDayOfPrdviousMonth(DateTime datetime)
{
return datetime.AddDays(1 - datetime.Day).AddDays(-1);
}
///
/// 获取某月总天数
///
///
///
public static int GetMonthTotalDay(DateTime dt)
{
int day = dt.AddDays(1 - dt.Day).AddMonths(1).AddDays(-1).Day;
return day;
}
///
/// 获取日期之间的周六周天的天数
///
///
///
///
public static int TotalDay(DateTime startTime, DateTime endTime)
{
int TotalDay = 0;
int dayCount = (endTime - startTime).Days;
if (dayCount == 1)
{
string dt = startTime.DayOfWeek.ToString();
if (dt == "Friday" || dt == "Saturday")
{
TotalDay = 2;
}
else if (dt == "Sunday")
{
TotalDay = 1;
}
}
else
{
int Saturday = 0;
int Sunday = 0;
for (int i = 0; i < dayCount; i++)
{
string dt = startTime.AddDays(i + 1).DayOfWeek.ToString();
switch (dt)
{
case "Saturday":
Saturday += 1;
break;
case "Sunday":
Sunday += 1;
break;
}
}
if (Sunday == 0 && Saturday == 1)//截止日期只有一个周六
{
TotalDay = 2;
}
else if (Sunday == 1 && Saturday == 0)// 截止日期只有一个周天
{
TotalDay = 1;
}
else
{
if (Saturday > Sunday)
{
TotalDay = Saturday + Sunday + 2;
}
else
{
TotalDay = Saturday + Sunday + 1;
}
}
}
return TotalDay;
}
#endregion
#region 字符转换
///
/// 为字符串左边填充字符
///
/// 111 LPAD(,'0',8) --> 00000111
///
///
/// 字符串
/// 替换的字符
/// 长度
///
public static string LPAD(object str, string swap, int length)
{
string s = str.ToString();
for (int i = 0; i < length - str.ToString().Length; i++)
{
s = swap + s;
}
return s;
}
///
/// 填充字符到字符串左边
///
///
/// 填充的字符
/// 长度
///
public static string LFillChar(string str, string swap, int len)
{
for (int i = 0; i < len; i++)
{
str = swap + str;
}
return str;
}
///
/// 获取数字的中文字符
///
///
///
public static string GetNumberChar(int number)
{
string[] str = new string[] { "一", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二" };
if (number < 0 && number > str.Length)
{
return "{没有该数字的中文名称}";
}
return str[number - 1];
}
///
/// 字符串转化为字节
///
///
///
public static byte[] ToByte(string Str)
{
return Convert.FromBase64String(Str);
}
///
/// 字节转化为字符串
///
///
///
public static string ToStr(Byte[] Byt)
{
return Convert.ToBase64String(Byt);
}
///
/// 正常转换为字节
///
///
///
public static Byte[] NormalToByte(string str)
{
return Encoding.Default.GetBytes(str);
}
///
/// 正常专号为字符串
///
///
///
public static string NormalToStr(byte[] Byt)
{
return Encoding.Default.GetString(Byt);
}
///
/// 截取指定长度字符
///
///
///
///
public static string Substring(string str, int len)
{
return Substring(str, len, "");
}
///
/// 截取指定长度字符,字符过长可填充指定符号
///
///
///
///
///
public static string Substring(string str, int len, string endFillChar)
{
if (str.Length < len)
return str;
else
return str.Substring(0, len) + endFillChar;
}
///
/// 移除字符串末尾指定字符
///
/// 需要移除的字符串
/// 指定字符
/// 移除后的字符串
public static string RemoveLastChar(string str, string value)
{
int _finded = str.LastIndexOf(value);
if (_finded != -1)
{
return str.Substring(0, _finded);
}
return str;
}
///
/// 过滤HTML标志
///
///
///
public static string FilterHtml(string html)
{
if (string.IsNullOrWhiteSpace(html))
{
return "";
}
//删除脚本
html = Regex.Replace(html, @"", "", RegexOptions.IgnoreCase);
//删除HTML
html = Regex.Replace(html, @"<(.[^>]*)>", "", RegexOptions.IgnoreCase);
//Htmlstring = Regex.Replace(Htmlstring, @"([\r\n])[\s]+", "", RegexOptions.IgnoreCase);
html = Regex.Replace(html, @"-->", "", RegexOptions.IgnoreCase);
html = Regex.Replace(html, @"", "", RegexOptions.IgnoreCase);
html = Regex.Replace(html, @"", "", RegexOptions.IgnoreCase);
html = Regex.Replace(html, @"