#region 计算两个日期的时间间隔 /// <summary> /// 计算两个日期的时间间隔 /// </summary> /// <param name="DateTime1">第一个日期和时间</param> /// <param name="DateTime2">第二个日期和时间</param> /// <returns></returns> public static string DateDiff(DateTime DateTime1, DateTime DateTime2) { string dateDiff = null; TimeSpan ts1 = new TimeSpan(DateTime1.Ticks); TimeSpan ts2 = new TimeSpan(DateTime2.Ticks); TimeSpan ts = ts1.Subtract(ts2).Duration(); dateDiff = ts.Days.ToString() + "天" + ts.Hours.ToString() + "小时" + ts.Minutes.ToString() + "分钟" + ts.Seconds.ToString() + "秒" + ts.TotalMilliseconds.ToString() + "毫秒" ; return dateDiff; //说明: // 1.DateTime值类型代表了一个从公元0001年1月1日0点0分0秒到公元9999年12月31日23点59分59秒之间的具体日期时刻。因此,你可以用DateTime值类型来描述任何在想象范围之内的时间。一个DateTime值代表了一个具体的时刻 // 2.TimeSpan值包含了许多属性与方法,用于访问或处理一个TimeSpan值 // 下面的列表涵盖了其中的一部分: // Add:与另一个TimeSpan值相加。 // Days:返回用天数计算的TimeSpan值。 // Duration:获取TimeSpan的绝对值。 // Hours:返回用小时计算的TimeSpan值 // Milliseconds:返回用毫秒计算的TimeSpan值。 // Minutes:返回用分钟计算的TimeSpan值。 // Negate:返回当前实例的相反数。 // Seconds:返回用秒计算的TimeSpan值。 // Subtract:从中减去另一个TimeSpan值。 // Ticks:返回TimeSpan值的tick数。 // TotalDays:返回TimeSpan值表示的天数。 // TotalHours:返回TimeSpan值表示的小时数。 // TotalMilliseconds:返回TimeSpan值表示的毫秒数。 // TotalMinutes:返回TimeSpan值表示的分钟数。 // TotalSeconds:返回TimeSpan值表示的秒数。 } #endregion #region 上传文件方法,需要使和HTML上传控件 /// <summary> /// 上传文件方法 定义上传文件类型用数组 , 返回结果 如果为TYPE_ERR为类型不正确 如果返回SIZE_ERR为大小不正确 FILE_ERR为文件不正确 /r/n ///string[] strfiletype = new string[] { "jpg" };/r/n ///string strResult = string.Empty;/r/n ///strResult = Public.Upload.UploadFile(Server.MapPath("/updatepath"), 999999, strfiletype, PhotoFile);/r/n ///if (strResult == "TYPE_ERR")/r/n ///{/r/n /// alert.show(this.Page, "图片格式不正确,请重新选择后再试!");/r/n /// return;/r/n /// }/r/n /// </summary> /// <param name="filePath">文件路径</param> /// <param name="maxSize">文件最大尺寸</param> /// <param name="fileType">文件类型</param> /// <param name="TargetFile">上传框</param> /// <param name="GetImgFileName">上传后的名字</param> /// <returns></returns> public static string UploadFile(string filePath, int maxSize, string[] fileType, System.Web.UI.HtmlControls.HtmlInputFile TargetFile, string GetImgFileName) { string Result = "UnDefine"; bool typeFlag = false; string FilePath = filePath; int MaxSize = maxSize; string strFileName, strNewName, strFilePath; if (TargetFile.PostedFile.FileName == "") { return "FILE_ERR"; } strFileName = TargetFile.PostedFile.FileName; TargetFile.Accept = "*/*"; strFilePath = FilePath; if (Directory.Exists(strFilePath) == false) { Directory.CreateDirectory(strFilePath); } FileInfo myInfo = new FileInfo(strFileName); string strOldName = myInfo.Name; strNewName = strOldName.Substring(strOldName.LastIndexOf('.') + 1, strOldName.Length - strOldName.LastIndexOf('.') - 1); strNewName = strNewName.ToLower(); //判断用户上传文件实际类型 if (!GetMIMEByFileType(TargetFile.PostedFile.ContentType)) { typeFlag = false; return "TYPE_ERR"; } else { //if (TargetFile.PostedFile.ContentLength <= MaxSize) //{ for (int i = 0; i <= fileType.GetUpperBound(0); i++) { if (strNewName.ToLower() == fileType[i].ToString()) { typeFlag = true; break; } } if (typeFlag) { string strFileNameTemp = GetImgFileName; string strFilePathTemp = strFilePath; strOldName = strFileNameTemp + "." + strNewName; strFilePath = strFilePath + strOldName; TargetFile.PostedFile.SaveAs(strFilePath); Result = strOldName; TargetFile.Dispose(); } else { return "TYPE_ERR"; } //} //else //{ // return "SIZE_ERR"; //} } return (Result); } /// <summary> /// 根据文件后缀名返回文件的MIME类型 /// </summary> /// <param name="strfiletype">文件后缀名,没有.</param> /// <returns>MIME类型</returns> public static bool GetMIMEByFileType(string strfiletype) { switch (strfiletype.ToLower()) { case "image/gif": return true; case "image/jpeg": return true; case "image/pjpeg": return true; case "image/png": return true; case "application/x-MS-bmp": return true; default: return false; } } #endregion #region 返回字符串真实长度, 1个汉字长度为2 /// <summary> /// 返回字符串真实长度, 1个汉字长度为2 /// </summary> /// <returns></returns> public static int GetStringLength(string str) { return Encoding.Default.GetBytes(str).Length; } #endregion #region 强随机数方法 2006-10-25 m /// <summary> /// 获取随机数方法,可获得指定长度、是否为全数字、全字母、数字加字母形式 /// 当有字母返回时可设置字母全大写、字母全小写、字母大小混合写形式 /// </summary> /// <param name="len">指定返回随机数长度</param> /// <param name="mod"> /// 指定返回随机数的类型(0为全数字,1为数字与字母其中字母部分小写,2为数字与字母其中字母部分大写,3为数字与字母其中字母部分大小写混合 /// 4为全小写字母,5为全大写字母,6为全字母且字母大小写混合) /// </param> /// <returns>返回随机数字符串</returns> public static string GetRandNumber(int len, int mod) { #region 设置字符返回模式 int isnu = 0; int ulword = 0; switch (mod) { case 0: isnu = 0; break; case 1: isnu = 1; ulword = 0; break; case 2: isnu = 1; ulword = 1; break; case 3: isnu = 1; ulword = 2; break; case 4: isnu = 2; ulword = 0; break; case 5: isnu = 2; ulword = 1; break; case 6: isnu = 2; ulword = 2; break; } #endregion RNGCryptoServiceProvider rcsp = new RNGCryptoServiceProvider(); string getcrypt = ""; if (isnu == 0) { #region 获得单纯数字的随机数 byte[] Tarray = new byte[len]; rcsp.GetNonZeroBytes(Tarray); string tstring = ""; for (int i = 0; i < Tarray.Length; i++) { tstring += Tarray[i].ToString(); } Random rd = new Random(); for (int cnt = 0; cnt < len; cnt++) { getcrypt += tstring.Substring(rd.Next(0, tstring.Length), 1); } #endregion } else if (isnu == 1) { #region 获得数字加字母的随机数 byte[] Tarray = new byte[1]; int tcon = 0; while (tcon < len) { rcsp.GetNonZeroBytes(Tarray); if (((char)Tarray[0] < 91 && (char)Tarray[0] > 64) || ((char)Tarray[0] < 123 && (char)Tarray[0] > 96)) { getcrypt += ((char)Tarray[0]).ToString(); tcon++; } else if (((char)Tarray[0] < 58 && (char)Tarray[0] > 47)) { getcrypt += Tarray[0].ToString(); tcon++; } } if (ulword == 0) { getcrypt = getcrypt.ToLower(); getcrypt = getcrypt.Substring(0, len); } else if (ulword == 1) { getcrypt = getcrypt.ToUpper(); getcrypt = getcrypt.Substring(0, len); } #endregion } else if (isnu == 2) { #region 获得字母的随机数 byte[] Tarray = new byte[1]; int tcon = 0; while (tcon < len) { rcsp.GetNonZeroBytes(Tarray); if (((char)Tarray[0] < 91 && (char)Tarray[0] > 64) || ((char)Tarray[0] < 123 && (char)Tarray[0] > 96)) { getcrypt += ((char)Tarray[0]).ToString(); tcon++; } } if (ulword == 0) { getcrypt = getcrypt.ToLower(); } else if (ulword == 1) { getcrypt = getcrypt.ToUpper(); } #endregion } return getcrypt; } #endregion #region 按指定长度截取指定字符串[自动判断半角/全角/符号,已正确返回字符串长度] 2007-02-26 m public static string returnstring(string rcstring, int sublen) { //rcstring = rcstring.Trim().Replace(" ","").Replace(" ",""); if (rcstring.Length < 1) { return ""; } else { string rcstr = ToBj(rcstring); int intsob = 0; if (sublen >= rcstr.Length) { return rcstr; } else { //string strnew = string.Empty; //string strnew = rcstr.Substring(0,sublen); StringBuilder strnew = new StringBuilder(rcstr.Substring(0, sublen)); int strnewlength = strnew.Length; for (int i = 0; i < strnewlength; i++) { if (IsBjChar(strnew[i])) { intsob++; } } if (intsob != 0 && intsob > 1) { int inti = 0; int struns = intsob / 2; int strunsis = intsob % 2; string tempstri = rcstr.Substring(sublen, rcstr.Length - sublen); int cnt = 0; int intbom = 0; while (inti < struns) { if (cnt == tempstri.Length) { break; } if (IsBjChar(tempstri[cnt])) { intbom++; if (strunsis == 1 && intbom == 1) { inti++; strunsis = 0; intbom = 0; } else if (intbom == 2) { inti++; intbom = 0; } } else { inti++; } strnew.Append(tempstri[cnt].ToString()); cnt++; } } if (sublen > 17) return strnew.ToString() + "..."; else return strnew.ToString(); } } ///如果传入参数为10个长度 ///取当前字符串长度,并取前十个 依次进行循环 如果少几个就取几个 } /// <summary> /// 判断字符是否英文半角字符或标点 /// </summary> /// <remarks> /// 32 空格 /// 33-47 标点 /// 48-57 0~9 /// 58-64 标点 /// 65-90 A~Z /// 91-96 标点 /// 97-122 a~z /// 123-126 标点 /// </remarks> public static bool IsBjChar(char c) { int i = (int)c; return i >= 32 && i <= 126; } /**/ /// <summary> /// 判断字符是否全角字符或标点 /// </summary> /// <remarks> /// <para>全角字符 - 65248 = 半角字符</para> /// <para>全角空格例外</para> /// </remarks> public static bool IsQjChar(char c) { if (c == '\u3000') return true; int i = (int)c - 65248; if (i < 32) return false; return IsBjChar((char)i); } /**/ /// <summary> /// 将字符串中的全角字符转换为半角 /// </summary> public static string ToBj(string s) { if (s == null || s.Trim() == string.Empty) return s; StringBuilder sb = new StringBuilder(s.Length); for (int i = 0; i < s.Length; i++) { if (s[i] == '\u3000') sb.Append('\u0020'); else if (IsQjChar(s[i])) sb.Append((char)((int)s[i] - 65248)); else sb.Append(s[i]); } return sb.ToString(); } #endregion #region 从字符串的指定位置截取指定长度的子字符串 /// <summary> /// 从字符串的指定位置截取指定长度的子字符串 /// </summary> /// <param name="str">原字符串</param> /// <param name="startIndex">子字符串的起始位置</param> /// <param name="length">子字符串的长度</param> /// <returns>子字符串</returns> public static string CutString(string str, int startIndex, int length) { if (startIndex >= 0) { if (length < 0) { length = length * -1; if (startIndex - length < 0) { length = startIndex; startIndex = 0; } else { startIndex = startIndex - length; } } if (startIndex > str.Length) { return ""; } } else { if (length < 0) { return ""; } else { if (length + startIndex > 0) { length = length + startIndex; startIndex = 0; } else { return ""; } } } if (str.Length - startIndex < length) { length = str.Length - startIndex; } return str.Substring(startIndex, length); } #endregion #region 从字符串的指定位置开始截取到字符串结尾的了符串 /// <summary> /// 从字符串的指定位置开始截取到字符串结尾的了符串 /// </summary> /// <param name="str">原字符串</param> /// <param name="startIndex">子字符串的起始位置</param> /// <returns>子字符串</returns> public static string CutString(string str, int startIndex) { return CutString(str, startIndex, str.Length); } #endregion #region 输出JS代码 /// <summary> /// 向用户提示对话框的类 /// </summary> //public class Alart //{ /// <summary> /// 输出模式枚举 /// </summary> public enum AlartState { /// <summary> /// 在父窗口中打开该连接 /// </summary> OpenInParentWindow, /// <summary> /// 在当前窗口中打开该连接 /// </summary> OpenInThisWindow, /// <summary> /// 返回到上一个页面 /// </summary> Back, /// <summary> /// 关闭窗口 /// </summary> CloseWindow, /// <summary> /// 不做任何操作 /// </summary> Nothing } /// <summary> /// 输出JS提示信息对话框 WebSite.Components.Public.ShowAlart(Context, "上传文件字节(大小)超过限制!", WebSite.Components.Public.AlartState.Nothing, Request.Url.ToString()); /// </summary> /// <param name="context">页面Context</param> /// <param name="Msg">消息内容</param> /// <param name="Astate">输出模式 * 枚举</param> /// <param name="ToUrl">提示后要转到的URL</param> /// public static void ShowAlart(HttpContext context, string Msg, AlartState Astate, string ToUrl) { System.Text.StringBuilder mySB = new System.Text.StringBuilder(); mySB.AppendFormat("<script language='javascript'>alert('{0}');", Msg); switch (Astate) { case AlartState.Back: mySB.Append("history.go(-1);"); break; case AlartState.CloseWindow: mySB.Append("top.window.close();"); break; case AlartState.OpenInParentWindow: mySB.AppendFormat("top.location = '{0}';", ToUrl); break; case AlartState.OpenInThisWindow: mySB.AppendFormat("window.location = '{0}';", ToUrl); break; case AlartState.Nothing: break; } mySB.Append("</script>"); context.Response.Write(mySB.ToString()); } //} #endregion #region 获得设置配置文件 #region 获取CONFIG中的appSettings指定键名的设置值 /// <summary> /// 获取CONFIG中的appSettings指定键名的设置值 /// </summary> /// <param name="configName">键名</param> /// <returns>键值 返回GET_ERR则获取错误</returns> public static string GetConfigPar(string configName) { try { return System.Configuration.ConfigurationManager.AppSettings[configName].ToString(); } catch { return "GET_ERR"; } } #endregion #region 读指定取配置文件 /// <summary> /// 读Setting.config取配置文件 /// /// </summary> /// <param name="Target"></param> /// <param name="ConfigPathName"></param> /// <returns></returns> static internal string GetConfigValue(string Target, string XmlPath) { System.Xml.XmlDocument xdoc = new XmlDocument(); xdoc.Load(XmlPath); XmlElement root = xdoc.DocumentElement; XmlNodeList elemList = root.GetElementsByTagName(Target); return elemList[0].InnerXml; } #endregion #region 读Setting.config取配置文件 /// <summary> /// 读Setting.config取配置文件 /// </summary> /// <param name="Target"></param> /// <returns></returns> public static string GetConfigValue(string Target) { string path = HttpContext.Current.Server.MapPath(@"~/Setting.config"); return GetConfigValue(Target, path); } #endregion #region 设置CONFIG中的appSettings指定键名的值 /// <summary> /// 设置CONFIG中的appSettings指定键名的值 /// </summary> /// <param name="configName">键名</param> /// <param name="configValue">键值</param> /// <returns>返回设置结果 SET_ERR则设置失败 SET_SUC则设置成功</returns> public static string SetConfiParEng(string configName, string configValue) { try {//this.Request.ApplicationPath + string file = HttpContext.Current.Server.MapPath(@"~\Web.config"); XmlDocument document = new XmlDocument(); document.Load(file); XmlNode node = document.SelectSingleNode("//add[@key = '" + configName + "']"); node.Attributes[configName].Value = configValue; document.Save(file); return "SET_SUC"; } catch { return "SET_ERR"; } } #endregion #region 设置指定键名及新值 public static void SetConfiPar_E(string appSettingsName, string newValue) { string fileName = HttpContext.Current.Server.MapPath(@"~\Web.config"); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(fileName); XmlNodeList topM = xmlDoc.DocumentElement.ChildNodes; foreach (XmlElement element in topM) { #region 取得目标节点,并赋新值 if (element.Name == "appSettings") { XmlNodeList node = element.ChildNodes; if (node.Count > 0) { foreach (XmlElement el in node) { if (el.Attributes["key"].Value == appSettingsName) { el.Attributes["value"].Value = newValue; xmlDoc.Save(fileName); return; } } } } #endregion } } #endregion #region 设置指定键名及新值 public static void SetConfiPar_3(string appSettingsName, string newValue) { string filename = HttpContext.Current.Server.MapPath(@"~\Web.config"); XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(filename); XmlNodeList topM = xmldoc.DocumentElement.ChildNodes; foreach (XmlElement element in topM) { if (element.Name.ToLower() == "appsettings") { XmlNodeList _node = element.ChildNodes; if (_node.Count > 0) { foreach (XmlElement el in _node) { if (el.Attributes["key"].InnerXml.ToLower() == appSettingsName.ToLower()) { el.Attributes["value"].Value = newValue; } } } } } xmldoc.Save(filename); } #endregion #region 得到配置文件 public static XmlDocument GetWebConfig() { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(GetXmlFileName()); return xmlDoc; } #endregion #region 得到WEBCONFIG配置文件 public static string GetXmlFileName() { // return HttpContext.Current.Server.MapPath(@"~\Web.config"); return HttpContext.Current.Server.MapPath(@"~\Web.config"); } #endregion #region 判断是否存在此节点 /// <summary> /// 判断是否存在此节点 /// </summary> /// <param name="strNode"></param> /// <returns></returns> public bool IsExistNode(string strNode) { XmlDocument xmlDoc = GetWebConfig(); XmlNode xmlNode = xmlDoc.SelectSingleNode(@"/" + strNode); // retrieve the appSettings xmlNode xmlNode = xmlDoc.SelectSingleNode("//" + strNode); return (xmlNode != null); } #endregion #region 判断指定节点名及键值 /// <summary> /// 判断指定节点名及键值 /// </summary> /// <param name="strNodeName"></param> /// <param name="strKey"></param> /// <returns></returns> public bool IsExistKey(string strNodeName, string strKey) { XmlDocument xmlDoc = GetWebConfig(); bool IsExist = false; //在当前所有节点中循环查找 XmlNodeList topM = xmlDoc.DocumentElement.ChildNodes; foreach (XmlElement element in topM) { //判定是否存在<appSettings>节点 if (element.Name == strNodeName) { XmlNodeList node = element.ChildNodes; //判定是否存在定义的信息 if (node.Count > 0) { //在子节点中循环查找 foreach (XmlElement el in node) { //判定Key是否等于所需信息Liumm IsExist = (el.Attributes["key"].InnerXml == strKey); if (IsExist) break; } } } } return IsExist; } #endregion #region 设置指定键名及值 /// <summary> /// 设置指定键名及值 /// </summary> /// <param name="key"></param> /// <param name="value"></param> public static void SetConfiPar(string key, string value) { XmlDocument xmlDoc = GetWebConfig(); XmlNode xmlNode = xmlDoc.SelectSingleNode(@"/appSettings"); // retrieve the appSettings xmlNode xmlNode = xmlDoc.SelectSingleNode("//appSettings"); if (xmlNode == null) { throw new InvalidOperationException("appSettings section not found"); } try { // XPath select setting "add" element that contains this key XmlElement addElem = (XmlElement)xmlNode.SelectSingleNode("//add[@key='" + key + "']"); if (addElem != null) { addElem.SetAttribute("value", value); } // not found, so we need to add the element, key and value else { XmlElement entry = xmlDoc.CreateElement("add"); entry.SetAttribute("key", key); entry.SetAttribute("value", value); xmlNode.AppendChild(entry); } //save it try { XmlTextWriter writer = new XmlTextWriter(GetXmlFileName(), null); writer.Formatting = Formatting.Indented; xmlDoc.WriteTo(writer); writer.Flush(); writer.Close(); } catch (Exception ex) { throw new Exception(ex.Message); } } catch (Exception ex) { throw new InvalidOperationException(ex.Message); } } #endregion #endregion