101 lines
3.5 KiB
C#
101 lines
3.5 KiB
C#
|
|
using System;
|
|||
|
|
using System.Globalization;
|
|||
|
|
using System.Text;
|
|||
|
|
|
|||
|
|
namespace APT.Infrastructure.Core
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 工具类
|
|||
|
|
/// </summary>
|
|||
|
|
public static class Util
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 新建一个 <see cref="Guid"/>与<see cref="DateTime"/>混合构成的适用于DB的可排序的<see cref="Guid"/>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <returns>Comb Guid数据</returns>
|
|||
|
|
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);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 加密密码
|
|||
|
|
/// </summary>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
public static string EncryptPassword(string userCode, string password)
|
|||
|
|
{
|
|||
|
|
var fixedMark = "-_-APT-_-";
|
|||
|
|
String sourceString = string.Concat(fixedMark, userCode.ToUpper(), password);
|
|||
|
|
return HashUtil.GetMD5(sourceString);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取指定日期,在为一年中为第几周
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="dt">指定时间</param>
|
|||
|
|
/// <reutrn>返回第几周</reutrn>
|
|||
|
|
public static int GetWeekOfYear(DateTime dt)
|
|||
|
|
{
|
|||
|
|
GregorianCalendar gc = new GregorianCalendar();
|
|||
|
|
int weekOfYear = gc.GetWeekOfYear(dt, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
|
|||
|
|
return weekOfYear;
|
|||
|
|
}
|
|||
|
|
/// <summary>
|
|||
|
|
///
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="str"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
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());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// 判断byte数组是否相等
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="bt1"></param>
|
|||
|
|
/// <param name="bt2"></param>
|
|||
|
|
/// <returns></returns>
|
|||
|
|
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;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|