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, @"