很多人喜欢在网上,论坛里,QQ群里,向别人要代码...... 而我个人习惯,不太喜欢看别人代码,因为扔在论坛上的代码,虽然也有精品的,但是大多是新手练手,每每有看到哭笑不得的代码. 所以一般只看运行,看代码也就看看结构,层次.
可是工作中,却每每需要去看别人的代码.....今天就遇到一个极品垃圾代码...
一个类里面接近900行代码....线程不安全也就算了,真正能用的代码,不足一半,而那不足一半的代码中,几乎全是垃圾. 让人苦笑.
举几个例子,也算给大家乐一乐,对新手也好引以为戒. 人都是新手走来的,都犯过低级错误,关键是不要有下次.
1, 获取上个星期的今天. 用了长长的代码, 首先新建了SqlConnectin和SqlCommand, SqlDataAdapter.....然后从数据库执行"SELECT getdate()" 语句,得到一个DataSet, 然后从这个DataSet的Tables[0].Rows[0][0] 得到一个代码当前日期的object, 为了转成DataTime ,使用了DateTime.Parse(),而这个方法需要string,所以又ToString()了一下...... ....然后再费尽方法,在上面去掉了1星期.........
其实大家都知道,这本非常简单的一句就够了
DateTime.Today.AddDays(-7)
2,获取本月的最后一天. 比上面更夸张.....整整用了近100行代码.....
1 /// <summary>
2 /// 获取当月的月未时间 如:20051130
3 /// </summary>
4 /// <returns></returns>
5 public static DateTime GetMonthEnd(DateTime dt)
6 {
7 DateTime EndDate;
8 string strYear, strMonth, strDay;
9 strYear = dt.Year.ToString();
10 strMonth = (dt.Month > 9) ? dt.Month.ToString() : "0" + dt.Month.ToString();
11 strDay = GetDaysOfMonth(dt).ToString();
12 string strDate = strYear + "-" + strMonth + "-" + strDay;
13 EndDate = Convert.ToDateTime(strDate);
14 return EndDate;
15
16
17 }
18
19 /// <summary>本月有多少天</summary>
20 /// <param name="dt">日期</param>
21 /// <returns>天数</returns>
22 private static int GetDaysOfMonth(DateTime dt)
23 {
24 int year, month, days = 0;
25 year = dt.Year;
26 month = dt.Month;
27
28 //--利用年月信息,得到当前月的天数信息。
29 switch (month)
30 {
31 case 1:
32 days = 31;
33 break;
34 case 2:
35 if (IsRuYear(dt))
36 {
37 days = 29;
38 }
39 else
40 {
41 days = 28;
42 }
43
44 break;
45 case 3:
46 days = 31;
47 break;
48 case 4:
49 days = 30;
50 break;
51 case 5:
52 days = 31;
53 break;
54 case 6:
55 days = 30;
56 break;
57 case 7:
58 days = 31;
59 break;
60 case 8:
61 days = 31;
62 break;
63 case 9:
64 days = 30;
65 break;
66 case 10:
67 days = 31;
68 break;
69 case 11:
70 days = 30;
71 break;
72 case 12:
73 days = 31;
74 break;
75 }
76
77 return days;
78
79 }
80
81 /// <summary>判断当前日期所属的年份是否是闰年</summary>
82 /// <param name="dt">日期</param>
83 /// <returns>是闰年:True ,不是闰年:False</returns>
84 private static bool IsRuYear(DateTime idt)
85 {
86 int n;
87 n = idt.Year;
88
89 if ((n % 400 == 0) || (n % 4 == 0 && n % 100 != 0))
90 {
91 return true;
92 }
93 else
94 {
95 return false;
96 }
97 }
2 /// 获取当月的月未时间 如:20051130
3 /// </summary>
4 /// <returns></returns>
5 public static DateTime GetMonthEnd(DateTime dt)
6 {
7 DateTime EndDate;
8 string strYear, strMonth, strDay;
9 strYear = dt.Year.ToString();
10 strMonth = (dt.Month > 9) ? dt.Month.ToString() : "0" + dt.Month.ToString();
11 strDay = GetDaysOfMonth(dt).ToString();
12 string strDate = strYear + "-" + strMonth + "-" + strDay;
13 EndDate = Convert.ToDateTime(strDate);
14 return EndDate;
15
16
17 }
18
19 /// <summary>本月有多少天</summary>
20 /// <param name="dt">日期</param>
21 /// <returns>天数</returns>
22 private static int GetDaysOfMonth(DateTime dt)
23 {
24 int year, month, days = 0;
25 year = dt.Year;
26 month = dt.Month;
27
28 //--利用年月信息,得到当前月的天数信息。
29 switch (month)
30 {
31 case 1:
32 days = 31;
33 break;
34 case 2:
35 if (IsRuYear(dt))
36 {
37 days = 29;
38 }
39 else
40 {
41 days = 28;
42 }
43
44 break;
45 case 3:
46 days = 31;
47 break;
48 case 4:
49 days = 30;
50 break;
51 case 5:
52 days = 31;
53 break;
54 case 6:
55 days = 30;
56 break;
57 case 7:
58 days = 31;
59 break;
60 case 8:
61 days = 31;
62 break;
63 case 9:
64 days = 30;
65 break;
66 case 10:
67 days = 31;
68 break;
69 case 11:
70 days = 30;
71 break;
72 case 12:
73 days = 31;
74 break;
75 }
76
77 return days;
78
79 }
80
81 /// <summary>判断当前日期所属的年份是否是闰年</summary>
82 /// <param name="dt">日期</param>
83 /// <returns>是闰年:True ,不是闰年:False</returns>
84 private static bool IsRuYear(DateTime idt)
85 {
86 int n;
87 n = idt.Year;
88
89 if ((n % 400 == 0) || (n % 4 == 0 && n % 100 != 0))
90 {
91 return true;
92 }
93 else
94 {
95 return false;
96 }
97 }
其实只需要1句:
DateTime.Parse(dt.ToString("yyyy-MM-01")).AddMonths(1).AddDays(-1);
下个月1号向前走一天就是这个月最后一天了.整个类的各种方法代码中稀奇古怪的什么都有, 其实只是希望提醒一些新手,写代码注意思考.