通用方法总结(获得两个日期之间的工作天数(周一到周五),加密解密,一个方法执行花费的时间(代码优化时可以使用))

日期计算:

 1         /// <summary>
 2         /// 获得两个日期之间的工作天数(周一到周五)
 3         /// </summary>
 4         /// <param name="startTime">起始日期</param>
 5         /// <param name="endTime">结束日期</param>
 6         /// <returns>返回工作天数</returns>
 7         public static int GetWorkDays(DateTime startTime, DateTime endTime)
 8         {
 9             if (startTime > endTime) return 0; //如果结束时间小于起始时间,则返回-1
10
11             int weekdays = 0;
12             for (DateTime start = startTime; start <= endTime; start = start.AddDays(1))
13             {
14                 if (start.DayOfWeek == DayOfWeek.Saturday || start.DayOfWeek == DayOfWeek.Sunday)
15                 {
16                     weekdays++;
17                 }
18             }
19
20             TimeSpan ts = endTime.AddDays(1) - startTime;
21             return Math.Abs(ts.Days) - weekdays;
22         }

获得两个日期之间的工作天数(周一到周五)

几种加密方式:

 1         /// <summary>
 2         /// Base64加密
 3       /// </summary>
 4         /// <param name="codeName">加密采用的编码方式</param>
 5         /// <param name="source">待加密的明文</param>
 6         /// <returns></returns>
 7         public static string EncodeBase64(Encoding encode, string source)
 8         {
 9             try
10             {
11                 byte[] bytes = encode.GetBytes(source);
12                 source = Convert.ToBase64String(bytes);
13                 source = source.Replace("+", " ");
14             }
15             catch
16             {
17                 source = string.Empty;
18             }
19             return source;
20         }
21
22        

Base64加密

 1         /// <summary>
 2         /// Base64解密
 3         /// </summary>
 4         /// <param name="codeName">解密采用的编码方式,注意和加密时采用的方式一致</param>
 5         /// <param name="result">待解密的密文</param>
 6         /// <returns>解密后的字符串</returns>
 7         public static string DecodeBase64(Encoding encode, string result)
 8         {
 9             string decode = "";
10             try
11             {
12                 byte[] bytes = Convert.FromBase64String(result.Replace(" ", "+"));
13                 decode = encode.GetString(bytes);
14             }
15             catch
16             {
17                 decode = result;
18             }
19             return decode;
20         }
21
22       

Base64解密

 1    private string _DESKey = "dswebeee";
 2         public string DESKey
 3         {
 4             set
 5             {
 6                 _DESKey = value;
 7             }
 8         }
 9
10         /// <summary>
11         /// des加密
12         /// </summary>
13         /// <param name="toEncrypt"></param>
14         /// <returns></returns>
15         public string DESEncrypt(string toEncrypt)
16         {
17             //定义DES加密服务提供类
18             DESCryptoServiceProvider des = new DESCryptoServiceProvider();
19             //加密字符串转换为byte数组
20             byte[] inputByte = System.Text.ASCIIEncoding.UTF8.GetBytes(toEncrypt);
21             //加密密匙转化为byte数组
22             byte[] key = Encoding.ASCII.GetBytes(_DESKey); //DES密钥(必须8字节)
23             des.Key = key;
24             des.IV = key;
25             //创建其支持存储区为内存的流
26             MemoryStream ms = new MemoryStream();
27             //定义将数据流链接到加密转换的流
28             CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
29             cs.Write(inputByte, 0, inputByte.Length);
30             cs.FlushFinalBlock();
31             StringBuilder ret = new StringBuilder();
32             foreach (byte b in ms.ToArray())
33             {
34                 //向可变字符串追加转换成十六进制数字符串的加密后byte数组。
35                 ret.AppendFormat("{0:X2}", b);
36             }
37             return ret.ToString();
38         }
39
40
41         /// <summary>
42         /// des解密
43         /// </summary>
44         /// <param name="toDecrypt"></param>
45         /// <returns></returns>
46         public string DESDecrypt(string toDecrypt)
47         {
48             //定义DES加密解密服务提供类
49             DESCryptoServiceProvider des = new DESCryptoServiceProvider();
50             //加密密匙转化为byte数组
51             byte[] key = Encoding.ASCII.GetBytes(_DESKey);
52             des.Key = key;
53             des.IV = key;
54             //将被解密的字符串每两个字符以十六进制解析为byte类型,组成byte数组
55             int length = (toDecrypt.Length / 2);
56             byte[] inputByte = new byte[length];
57             for (int index = 0; index < length; index++)
58             {
59                 string substring = toDecrypt.Substring(index * 2, 2);
60                 inputByte[index] = Convert.ToByte(substring, 16);
61             }
62             //创建其支持存储区为内存的流
63             MemoryStream ms = new MemoryStream();
64             //定义将数据流链接到加密转换的流
65             CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
66             cs.Write(inputByte, 0, inputByte.Length);
67             cs.FlushFinalBlock();
68             return ASCIIEncoding.UTF8.GetString((ms.ToArray()));
69         } 

des加密和解密

代码下载

代码优化:

1 var timer = Stopwatch.StartNew();
2 long sumtimer = 0;
3 //要查看执行时间的代码
4 //Method();
5 timer.Stop();
6 string ms = String.Format("Method方法 {0} ms \r\n", timer.ElapsedMilliseconds);
7 sumtimer += timer.ElapsedMilliseconds;
8 timer = Stopwatch.StartNew();

查看代码的执行时间

时间: 2024-08-05 23:41:35

通用方法总结(获得两个日期之间的工作天数(周一到周五),加密解密,一个方法执行花费的时间(代码优化时可以使用))的相关文章

【翻译自mos文章】计算Oracle数据库中两个日期之间的工作日天数

计算两个日期之间的工作日天数(不包括这两个日期,不包括weekend) 参考自: How to Compute Business Days for a Date Range in SQL or PLSQL (Doc ID 1014162.6) 有两个方法: 第一个是 使用sql语句: SQL> SELECT ((TO_NUMBER(TRUNC(to_date('2015-04-22','yyyy-mm-dd'), 'D') - TRUNC(to_date('2015-04-21','yyyy-m

java计算两个日期之间相隔的天数

1 import java.text.ParseException; 2 import java.text.SimpleDateFormat; 3 import java.util.Calendar; 4 import java.util.Date; 5 6 7 public class date { 8 9 /** 10 * @param args 11 * @throws ParseException 12 */ 13 public static void main(String[] arg

Android-计算两个日期之间间隔的天数

要计算两个日期之间间隔的天数,必须把两个日期转换成统一的时间戳,然后计算其毫秒差,再将毫秒差转换成天数. System.out.print("开始时间:"); String str1 = beginTime; // "yyyyMMdd"格式 如 20131022 System.out.println("\n结束时间:"); String str2 = _endTime; // "yyyyMMdd"格式 如 20131022 S

求两个日期之间间隔的天数,Python实现

代码如下 1 def leap_year(y): #判断是否是闰年 2 if (y % 4 == 0 and y % 100 != 0) or y % 400 == 0: 3 return True 4 else: 5 return False 6 7 def days_in_month(y, m): #判断每个月都有几天 8 if m in [1, 3, 5, 7, 8, 10, 12]: 9 return 31 10 elif m in [4, 6, 9, 11]: 11 return 30

计算两个日期之间的工作日天数

最近遇到要求两个日期之间的工作日天数的问题,遂在网上找了下js的代码,参考了下别人的代码,发现写的都有些冗余,于是自己思考,进行了一下简单处理.主要是在循环处理上进行了精简. 对剩余天数的循环,也就可以考虑是对开始日期到剩余天数之间的处理,循环开始日期到剩余天数之间有多少个周六周日(最多只有一个周六或者一个周日),由于当前开始日期在(0-6)之间,也就是当前开始日期的星期对应的数字加上剩余天数(0-6)的循环一定在(0-11)之间,所以0,7代表周日,6代表周六. <html> <hea

C语言,使用结构体读入两个在同一年的日期,判断日期是否合法,并计算两个日期之间相差的天数。结构体定义如下:

如下: typedef struct date { int year; int month; int day; }; 提示: 1. 使用如下函数完成相应功能 int isleapyear(int y); //计算是否为闰年 int islegal(Date x); //计算日期是否合法 int calcday(Date x);//计算日期是当年的第几天,用于计算两个日期之间天数的差值 2. 用于一维数组表示一年每月含有的天数 int dayofmonth[12] = {31,28,31,30,3

计算两个日期之间相差的天数(带带负数) 支持格式YYYY-mm-dd比较

/** * 计算两个日期之间相差的天数(带带负数) 支持格式YYYY-mm-dd比较 * @param higDate 减数 * @param lowDate 被减数 * @returns 差值天数 格式不正确返回null * @dada 2016-09-19 lhh添加备注 */ function DateDiff(higDate, lowDate) { //sDate1和sDate2是2006-12-18格式 var aDate, oDate1, oDate2, iDays; aDate =

(013)每日SQL学习:确定两个日期之间的工作日天数和计算一年周内各日期次数

1.确定两个日期之间的工作日天数 --确定两个日期之间的工作日天数with x0 as (select to_date('2018-01-01','yyyy-mm-dd') as 日期 from dual union all select to_date('2018-01-15','yyyy-mm-dd') as 日期 from dual ), x1 as --日期并列显示 (select min (日期) 开始日期,max(日期) 结束日期 from x0 ), x2 as --日期之间的天数

两个日期之间相差的天数

输入两个字符串格式的日期,计算两日期之间,相差的天数 限制条件:输入的日期字符串,格式必须为 yyyy-MM-dd 方法一: 1 /** 2 *两个日期(字符串 格式:yyyy-MM-dd)的间隔天数 3 * 4 * @param smdate 较小的时间 5 * @param bdate 较大的时间 6 * @return 相差天数 7 */ 8 public static int daysBetween(String smdate,String bdate) throws ParseExce