记录一下一些在编程过程中常用的方法
1.获取时间戳
public static long GetTimeSpan()
{
var time = DateTime.Now;
DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0));//提示已过时
//DateTime startTime = TimeZoneInfo.ConvertTime(new DateTime(1970, 1, 1), TimeZoneInfo.Utc, TimeZoneInfo.Local); //新的
long t = (time.Ticks - startTime.Ticks) / 10000; //除10000调整为13位
return t;
}
2.Base64编码
public static string Base64Code(string Message)
{
byte[] encData_byte = new byte[Message.Length];
encData_byte = System.Text.Encoding.UTF8.GetBytes(Message);
string encodedData = Convert.ToBase64String(encData_byte);
return encodedData;
}
3.Md5加密
public static string Md5Create(string value, string signMethod = "md5")
{
// 第三步:使用MD5/HMAC加密
byte[] bytes;
if (Constants.SIGN_METHOD_HMAC.Equals(signMethod))
{
HMACMD5 hmac = new HMACMD5();
bytes = hmac.ComputeHash(Encoding.UTF8.GetBytes(value.ToString()));
hmac.Dispose();
}
else
{
MD5 md5 = MD5.Create();
bytes = md5.ComputeHash(Encoding.UTF8.GetBytes(value.ToString()));
md5.Dispose();
}
// 第四步:把二进制转化为大写的十六进制
StringBuilder result = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
result.Append(bytes[i].ToString("X2"));
}
return result.ToString();
}
4.短链接算法(不记得从哪抄的)
public static string[] ShortUrl(string url)
{
//可以自定义生成MD5加密字符传前的混合KEY
string key = "aleader";
//要使用生成URL的字符
string[] chars = new string[]
{
"a", "b", "c", "d", "e", "f", "g", "h",
"i", "j", "k", "l", "m", "n", "o", "p",
"q", "r", "s", "t", "u", "v", "w", "x",
"y", "z", "0", "1", "2", "3", "4", "5",
"6", "7", "8", "9", "A", "B", "C", "D",
"E", "F", "G", "H", "I", "J", "K", "L",
"M", "N", "O", "P", "Q", "R", "S", "T",
"U", "V", "W", "X", "Y", "Z"
};
//对传入网址进行MD5加密
string hex = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(key + url, "md5");
string[] resUrl = new string[4];
for (int i = 0; i< 4; i++)
{
//把加密字符按照8位一组16进制与0x3FFFFFFF进行位与运算
int hexint = 0x3FFFFFFF & Convert.ToInt32("0x" + hex.Substring(i * 8, 8), 16);
string outChars = string.Empty;
for (int j = 0; j< 6; j++)
{
//把得到的值与0x0000003D进行位与运算,取得字符数组chars索引
int index = 0x0000003D & hexint;
//把取得的字符相加
outChars += chars[index];
//每次循环按位右移5位
hexint = hexint >> 5;
}
//把字符串存入对应索引的输出数组
resUrl[i] = outChars;
}
return resUrl;
}
5.url编码(对大小写有要求的情况下)
public static string UrlEncoding(string content)
{
var result = new StringBuilder();
foreach (char c in content)
{
var u = HttpUtility.UrlEncode(c.ToString());
if (u.Length > 1)
{
u=u.ToUpper();
}
result.Append(u);
}
return result.ToString();
}
6.HttpGet
7.HttpPost
8.DataTable 转 List<Dcitionary<string,object>>(可用于直接接口返回输出成json)
public static List<object> DataTableToList(DataTable table)
{
if (table != null)
{
List<object> result = new List<object>();
if (table.Rows.Count > 0)
{
foreach (DataRow row in table.Rows)
{
Dictionary<string, object> item = new Dictionary<string, object>();
for (int i = 0; i < table.Columns.Count; i++)
{
item.Add(table.Columns[i].ColumnName, table.Columns[i].DataType.Name.Equals("DateTime") ? row[i].ToString() : row[i]);
}
result.Add(item);
}
}
return result;
}
return null;
}
9.(DataSet)DataTable 转 IList<T>(这个原项目里是别人写的)
public static IList<T> DataSetToIList<T>(DataSet p_DataSet, int p_TableIndex)
{
if (p_DataSet == null || p_DataSet.Tables.Count < 0)
return null;
if (p_TableIndex > p_DataSet.Tables.Count - 1)
return null;
if (p_TableIndex < 0)
p_TableIndex = 0;
DataTable p_Data = p_DataSet.Tables[p_TableIndex];
// 返回值初始化
IList<T> result = new List<T>();
for (int j = 0; j < p_Data.Rows.Count; j++)
{
T _t = (T)Activator.CreateInstance(typeof(T));
PropertyInfo[] propertys = _t.GetType().GetProperties();
foreach (PropertyInfo pi in propertys)
{
for (int i = 0; i < p_Data.Columns.Count; i++)
{
// 属性与字段名称一致的进行赋值
if (pi.Name.Equals(p_Data.Columns[i].ColumnName))
{
if (p_Data.Columns[i].DataType.Name != pi.PropertyType.Name)
{
pi.SetValue(_t, p_Data.Rows[j][i].ToString(), null);
}
else
{
// 数据库NULL值单独处理
if (p_Data.Rows[j][i] != DBNull.Value)
pi.SetValue(_t, p_Data.Rows[j][i], null);
else
pi.SetValue(_t, null, null);
break;
}
}
}
}
result.Add(_t);
}
return result;
}