mh_frame_sps/APT.Infrastructure.Core/Helper/Util.cs
2026-04-07 13:47:52 +08:00

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