using System; using System.Text; using Zhaizj.Framework.Data; namespace Zhaizj.Framework { /// /// 不同类型之间数值转换 /// public class cvt { /// /// 判断字符串是否是小数或整数 /// /// /// public static Boolean IsDecimal( String str ) { if (strUtil.IsNullOrEmpty( str )) { return false; } if (str.StartsWith( "-" )) { return isDecimal_private( str.TrimStart( '-' ) ); } else return isDecimal_private( str ); } private static Boolean isDecimal_private( String str ) { foreach (char ch in str.ToCharArray()) { if (!(char.IsDigit( ch ) || (ch == '.'))) { return false; } } return true; } /// /// 判断字符串是否是多个整数的列表,整数之间必须通过英文逗号分隔 /// /// /// public static Boolean IsIdListValid( String ids ) { if (strUtil.IsNullOrEmpty( ids )) { return false; } String[] strArray = ids.Split( new char[] { ',' } ); foreach (String str in strArray) { if (!IsInt( str )) { return false; } } return true; } /// /// 判断字符串是否是整数或负整数 /// /// /// public static Boolean IsInt( String str ) { if (strUtil.IsNullOrEmpty( str )) { return false; } if (str.StartsWith( "-" )) { str = str.Substring( 1, str.Length - 1 ); } if (str.Length > 10) { return false; } char[] chArray = str.ToCharArray(); foreach (char ch in chArray) { if (!char.IsDigit( ch )) { return false; } } if (chArray.Length == 10) { int charInt; Int32.TryParse( chArray[0].ToString(), out charInt ); if (charInt > 2) { return false; } int charInt2; Int32.TryParse( chArray[1].ToString(), out charInt2 ); if ((charInt == 2) && (charInt2 > 0)) { return false; } } return true; } /// /// 判断字符串是否是"true"或"false"(不区分大小写) /// /// /// 只有字符串是"true"或"false"(不区分大小写)时,才返回true public static Boolean IsBool( String str ) { if (str == null) return false; if (strUtil.EqualsIgnoreCase( str, "true" ) || strUtil.EqualsIgnoreCase( str, "false" )) return true; return false; } /// /// 将对象转换成目标类型 /// /// /// /// public static Object To( Object val, Type destinationType ) { return Convert.ChangeType( val, destinationType ); } /// /// 将整数转换成 Boolean 类型。只有参数等于1时,才返回true /// /// /// 只有参数等于1时,才返回true public static Boolean ToBool( int integer ) { return (integer == 1); } /// /// 将对象转换成 Boolean 类型。只有对象的字符串形式等于1或者true(不区分大小写)时,才返回true /// /// /// 只有对象的字符串形式等于1或者true(不区分大小写)时,才返回true public static Boolean ToBool( Object objBool ) { if (objBool == null) { return false; } String str = objBool.ToString(); return (str.Equals( "1" ) || str.ToUpper().Equals( "TRUE" )); } /// /// 将字符串(不区分大小写)转换成 Boolean 类型。只有字符串等于1或者true时,才返回true /// /// /// 只有字符串等于1或者true时,才返回true public static Boolean ToBool( String str ) { if (str == null) { return false; } if (str.ToUpper().Equals( "TRUE" )) { return true; } if (str.ToUpper().Equals( "FALSE" )) { return false; } return (str.Equals( "1" ) || str.ToUpper().Equals( "TRUE" )); } /// /// 将字符串转换成 System.Decimal 类型。如果str不是整数或小数,返回0 /// /// /// 如果str不是整数或小数,返回0 public static decimal ToDecimal( String str ) { if (!IsDecimal( str )) { return 0; } return Convert.ToDecimal( str ); } /// /// 将字符串转换成 System.Double 类型。如果str不是整数或小数,返回0 /// /// /// 如果str不是整数或小数,返回0 public static Double ToDouble( String str ) { if (!IsDecimal( str )) { return 0; } return Convert.ToDouble( str ); } /// /// 将字符串转换成 System.Decimal 类型。如果str不是整数或小数,返回参数 defaultValue 指定的值 /// /// /// /// public static decimal ToDecimal( String str, decimal defaultValue ) { if (!IsDecimal( str )) { return defaultValue; } return Convert.ToDecimal( str ); } /// /// 将对象转换成整数;如果不是整数,则返回0 /// /// /// 如果不是整数,则返回0 public static int ToInt( Object objInt ) { if ((objInt != null) && IsInt( objInt.ToString() )) { int result; Int32.TryParse( objInt.ToString(), out result ); return result; } return 0; } /// /// 将 decimal 转换成整数 /// /// /// public static int ToInt( decimal number ) { return Convert.ToInt32( number ); } /// /// 将对象转换成非Null形式,如果传入的参数是 null,则返回空字符串(即"",也即string.Empty) /// /// /// 如果为null,则返回空字符串(即"",也即string.Empty) public static String ToNotNull( Object str ) { if (str == null) { return ""; } return str.ToString(); } /// /// 将对象转换成 DateTime 形式,如果不符合格式,则返回当前时间 /// /// /// 如果不符合格式,则返回当前时间 public static DateTime ToTime( Object objTime ) { return ToTime( objTime, DateTime.Now ); } /// /// 将对象转换成 DateTime 形式,如果不符合格式,则返回第二个参数指定的时间 /// /// /// /// public static DateTime ToTime( Object objTime, DateTime targetTime ) { if (objTime == null) { return targetTime; } try { return Convert.ToDateTime( objTime ); } catch { return targetTime; } } /// /// 判断两个时间的日期是否相同(要求同年同月同日) /// /// /// /// public static Boolean IsDayEqual( DateTime day1, DateTime day2 ) { return (day1.Year == day2.Year && day1.Month == day2.Month && day1.Day == day2.Day); } /// /// 获取日期的日常表达形式,要求最近三天依次用 {今天,昨天,前天} 表示 /// /// /// 要求最近三天依次用 {今天、昨天、前天} 表示 public static String ToDayString( DateTime day ) { DateTime today = DateTime.Now; if (IsDayEqual( day, today )) return lang.get( "today" ); if (IsDayEqual( day, today.AddDays( -1 ) )) return lang.get( "yesterday" ); if (IsDayEqual( day, today.AddDays( -2 ) )) return lang.get( "thedaybeforeyesterday" ); return day.ToShortDateString(); } /// /// 获取时间的日常表达形式,格式为 {**小时前,**分钟前,**秒前},以及 {昨天,前天} /// /// /// 格式为 {**小时前,**分钟前,**秒前},以及 {昨天,前天} public static String ToTimeString( DateTime t ) { DateTime now = DateTime.Now; TimeSpan span = now.Subtract( t ); if (cvt.IsDayEqual( t, now )) { if (span.Hours > 0) return span.Hours + lang.get( "houresAgo" ); else { if (span.Minutes == 0) if (span.Seconds == 0) return lang.get( "justNow" ); else return span.Seconds + lang.get( "secondAgo" ); else return span.Minutes + lang.get( "minuteAgo" ); } } if (cvt.IsDayEqual( t, now.AddDays( -1 ) )) return lang.get( "yesterday" ); if (cvt.IsDayEqual( t, now.AddDays( -2 ) )) return lang.get( "thedaybeforeyesterday" ); return t.ToShortDateString(); } /// /// 将对象序列化为 xml (内部调用 .net 框架自带的 XmlSerializer) /// /// /// public static String ToXML( Object obj ) { return EasyDB.SaveToString( obj ); } /// /// 将整数转换成字符串形式,多个整数之间用英文逗号分隔 /// /// /// public static String ToString( int[] ids ) { if (ids == null || ids.Length == 0) return ""; StringBuilder builder = new StringBuilder(); for (int i = 0; i < ids.Length; i++) { builder.Append( ids[i] ); if (i < ids.Length - 1) builder.Append( ',' ); } return builder.ToString(); } /// /// 将字符串形式的 id 列表转换成整型数组 /// /// /// public static int[] ToIntArray( String myids ) { if (strUtil.IsNullOrEmpty( myids )) return new int[] { }; String[] arrIds = myids.Split( ',' ); int[] Ids = new int[arrIds.Length]; for (int i = 0; i < arrIds.Length; i++) { int oneID = ToInt( arrIds[i].Trim() ); Ids[i] = oneID; } return Ids; } /// /// 将字符串转换成以井号开头的表达形式;如果不是有效的颜色值,则返回null /// /// /// 将字符串转换成以井号开头的表达形式;如果不是有效的颜色值,则返回null public static String ToColorValue( String val ) { if (strUtil.IsColorValue( val ) == false) return null; if (val.StartsWith( "#" )) return val; return "#" + val; } /// /// 将10进制整数转换为62进制 /// /// /// 62进制数 public static String ToBase62( Int64 inputNum ) { String chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; return ToBase( inputNum, chars ); } /// /// 将10进制整数转换为n进制 /// /// 10进制整数 /// /// public static String ToBase( Int64 inputNum, String chars ) { int cbase = chars.Length; int imod; String result = ""; while (inputNum >= cbase) { imod = (int)(inputNum % cbase); result = chars[imod] + result; inputNum = inputNum / cbase; } return chars[(int)inputNum] + result; } /// /// 将62进制转换为10进制整数 /// /// 62进制数 /// 10进制整数 public static Int64 DeBase62( String str ) { String chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; return DeBase( str, chars ); } /// /// 将n进制转换为10进制整数 /// /// 需要转换的n进制数 /// /// 10进制整数 public static Int64 DeBase( String str, String chars ) { int cbase = chars.Length; Int64 result = 0; for (int i = 0; i < str.Length; i++) { int index = chars.IndexOf( str[i] ); result += index * (Int64)Math.Pow( cbase, (str.Length - i - 1) ); } return result; } } }