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;
}
}
}