using System; using System.Globalization; using System.Text; namespace APT.Infrastructure.Core { /// /// 工具类 /// public static class Util { /// /// 新建一个 混合构成的适用于DB的可排序的 /// /// Comb Guid数据 public static Guid NewID() { byte[] guidArray = Guid.NewGuid().ToByteArray(); DateTime dtBase = new DateTime(1900, 1, 1); DateTime dtNow = DateTime.Now; //获取用于生成byte字符串的天数与毫秒数 TimeSpan days = new TimeSpan(dtNow.Ticks - dtBase.Ticks); TimeSpan msecs = new TimeSpan(dtNow.Ticks - (new DateTime(dtNow.Year, dtNow.Month, dtNow.Day).Ticks)); //转换成byte数组 //注意SqlServer的时间计数只能精确到1/300秒 byte[] daysArray = BitConverter.GetBytes(days.Days); byte[] msecsArray = BitConverter.GetBytes((long)(msecs.TotalMilliseconds / 3.333333)); //反转字节以符合SqlServer的排序 Array.Reverse(daysArray); Array.Reverse(msecsArray); //把字节复制到Guid中 Array.Copy(daysArray, daysArray.Length - 2, guidArray, guidArray.Length - 6, 2); Array.Copy(msecsArray, msecsArray.Length - 4, guidArray, guidArray.Length - 4, 4); return new Guid(guidArray); } /// /// 加密密码 /// /// public static string EncryptPassword(string userCode, string password) { var fixedMark = "-_-APT-_-"; String sourceString = string.Concat(fixedMark, userCode.ToUpper(), password); return HashUtil.GetMD5(sourceString); } /// /// 获取指定日期,在为一年中为第几周 /// /// 指定时间 /// 返回第几周 public static int GetWeekOfYear(DateTime dt) { GregorianCalendar gc = new GregorianCalendar(); int weekOfYear = gc.GetWeekOfYear(dt, CalendarWeekRule.FirstDay, DayOfWeek.Monday); return weekOfYear; } /// /// /// /// /// public static string UrlEncode(string str) { StringBuilder sb = new StringBuilder(); byte[] byStr = System.Text.Encoding.UTF8.GetBytes(str); //默认是System.Text.Encoding.Default.GetBytes(str) for (int i = 0; i < byStr.Length; i++) { sb.Append(@"%" + Convert.ToString(byStr[i], 16)); } return (sb.ToString()); } /// /// 判断byte数组是否相等 /// /// /// /// public static bool CompareArray(byte[] bt1, byte[] bt2) { var len1 = bt1.Length; var len2 = bt2.Length; if (len1 != len2) { return false; } for (var i = 0; i < len1; i++) { if (bt1[i] != bt2[i]) return false; } return true; } } }