很多人喜欢在网上,论坛里,QQ群里,向别人要代码...... 而我个人习惯,不太喜欢看别人代码,因为扔在论坛上的代码,虽然也有精品的,但是大多是新手练手,每每有看到哭笑不得的代码. 所以一般只看运行,看代码也就看看结构,层次.
可是工作中,却每每需要去看别人的代码.....今天就遇到一个极品垃圾代码...
一个类里面接近900行代码....线程不安全也就算了,真正能用的代码,不足一半,而那不足一半的代码中,几乎全是垃圾. 让人苦笑.
举几个例子,也算给大家乐一乐,对新手也好引以为戒. 人都是新手走来的,都犯过低级错误,关键是不要有下次.
1,
获取上个星期的今天. 用了长长的代码,
首先新建了SqlConnectin和SqlCommand, SqlDataAdapter.....然后从数据库执行"SELECT
getdate()" 语句,得到一个DataSet, 然后从这个DataSet的Tables[0].Rows[0][0]
得到一个代码当前日期的object, 为了转成DataTime
,使用了DateTime.Parse(),而这个方法需要string,所以又ToString()了一下...... ....然后再费尽方法,在上
面去掉了1星期.........
其实大家都知道,这本非常简单的一句就够了
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
}
其实只需要1句:
DateTime.Parse(dt.ToString(
"
yyyy-MM-01
"
)).AddMonths(
1
).AddDays(
-
1
);
下个月1号向前走一天就是这个月最后一天了.
整个类的各种方法代码中稀奇古怪的什么都有, 其实只是希望提醒一些新手,写代码注意思考.