Phần này chúng ta tìm hiểu các phương thức so sánh, đối chiếu thời gian trong DateTime. Để lấy về kết quả True/False hoặc một cờ hiệu cụ thể của việc so sánh 2 khoảng thời gian
.
+ Compare: Truyền vào hai giá trị của hai ngày kiểu DateTime, hàm này sẽ so sánh giá trị 1 vs 2 để đưa ra kết quả. Chỉ ba giá trị được trả về: 1, 0, -1 thể hiện ngày thứ nhất lớn hơn, bằng nhau, nhỏ hơn. + CompareTo: Phương thức này có hai cách dùng – Cách 1 phương thức này được giá trị datetime cụ thể sử dụng để so sánh với giá trị khác. – Cách 2 phương thức này được giá trị datetime cụ thể sử dụng để so sánh với đối tượng datetime khác được truyền vào. Cả 2 cách kết quả trả về cũng chỉ có ba giá trị như hàm Compare trên là: 1, 0, -1 + Equals: Trả về một kết quả True/False. Dùng để so sánh giữa hai ngày có bằng nhau không.
Lưu ý !
Phương thức sử dụng static chỉ được gọi thông qua lớp chứa nó và không thể gọi từ một đối tượng cụ thể nào. Bạn có thể tìm hiểu thêm Static keyword
Phương thức sử dụng static chỉ được gọi thông qua lớp chứa nó và không thể gọi từ một đối tượng cụ thể nào. Bạn có thể tìm hiểu thêm Static keyword
1. Compare() – Đây là phương thức static của DateTime. Trả về một giá trị kiểu Int, với 2 tham số truyền vào là hai giá trị datetime.
Demo:
DateTime today=
DateTime.
Now;
// Get date time now this computer
DateTime daysAgo=
new
DateTime(
2013
,
09
,
10
)
;
int
result=
DateTime.
Compare(
today,
daysAgo)
;
int
result1=
DateTime.
Compare(
today,
today)
;
int
result2=
DateTime.
Compare(
daysAgo,
today)
;
Console.
WriteLine(
result)
;
// Output: 1
Console.
WriteLine(
result1)
;
// Output: 0
Console.
WriteLine(
result2)
;
// Output: -1
– Bạn có thể dùng các giá trị result để dùng cho các điều kiện, chẳng hạn in ra thông tin ngày nào lớn hơn hoặc bằng nhau …………………..
2. CompareTo()
– Phương thức này trả về kết quả kiểu Int, với 1 tham số truyền vào là giá trị datetime được khởi tạo trước đó hoặc một đối tượng DateTime. Nó chỉ khác với Compare chút xíu, kết quả trả về hoàn toàn như hàm so sánh Compare
Demo 1: Truyền vào giá trị khởi tạo trước
DateTime today=
DateTime.
Now;
// Get date time this computer
DateTime newday=
new
DateTime(
2013
,
8
,
19
)
;
int
result=
today.
CompareTo(
newday)
;
int
result1=
today.
CompareTo(
today)
;
int
result2=
newday.
CompareTo(
today)
;
Console.
WriteLine(
result)
;
// Output: 1
Console.
WriteLine(
result1)
;
// Output: 0
Console.
WriteLine(
result2)
;
// Output: -1
Demo 2: Truyền vào một đối tượng DT mới
DateTime newday=
new
DateTime(
2013
,
10
,
24
)
;
int
result=
newday.
CompareTo(
DateTime.
Now)
;
Console.
WriteLine(
result)
;
/*
*/
3. Equals() – Trả về kết quả True nếu 2 ngày được so sánh bằng nhau và ngược lại là False . Ta cần một biến kiểu bool để get lấy giá trị này
Demo 1: Một ngày cụ thể gọi hàm equals, với tham số truyền vào là một ngày khác để so sánh.
DateTime one=
new
DateTime(
2013
,
09
,
29
)
;
DateTime two=
new
DateTime(
2012
,
05
,
25
)
;
DateTime three=
two;
// Compare the DateTime objects and display the results.
bool
result=
one.
Equals(
two)
;
Console.
WriteLine(
"
The result is: {0}.
"
,
result)
;
//Output: False
result=
two.
Equals(
three)
;
Console.
WriteLine(
"
The result is: {0}.
"
,
result)
;
//Output: True
Demo 2: Thay vì tham số truyền vào là giá trị thời gian được khởi tạo trước đó như trên, ta có thể truyền một đối tượng mới như sau:
DateTime one=
new
DateTime(
2013
,
09
,
29
)
;
bool
result=
one.
Equals(
DateTime.
Now)
;
Console.
WriteLine(
"
The result is: {0}.
"
,
result)
;
//Output: False
Demo 3: Hàm equals() lúc này là hàm static. Và cũng có 2 cách truyền tham số, kiểu thứ nhất truyền vào 2 tham số khởi tạo từ trước, kiểu thứ hai truyền vào 2 đối tượng khởi tạo tại chỗ.
DateTime one=
new
DateTime(
2013
,
10
,
10
)
;
DateTime two=
new
DateTime(
2013
,
10
,
10
)
;
//True
DateTime time1=
new
DateTime(
2013
,
09
,
27
,
15
,
59
,
59
)
;
DateTime time2=
new
DateTime(
2013
,
09
,
27
,
15
,
59
,
59
)
;
//True
DateTime dt1=
new
DateTime(
DateTime.
Today.
Ticks)
;
DateTime dt2=
new
DateTime(
DateTime.
Today.
Ticks)
;
// True
/* newdays1 and newdays2 are equal if their Ticks property values are equal, otherwise false. */
DateTime newdays1=
new
DateTime(
DateTime.
Now.
Ticks)
;
DateTime newdays2=
new
DateTime(
DateTime.
Now.
Ticks)
;
//True/False
Console.
WriteLine(
"
Time now is:
"
+
'n'+
"
{0}
"
+
'n'+
"
{1}
"
,
newdays2,
newdays1)
;
/* Get ticks values*/
long
tick1=
newdays1.
Ticks;
long
tick2=
newdays2.
Ticks;
Console.
WriteLine(
"
Ticks value of TimeNow is:
"
+
'n'+
"
{0}
"
+
'n'+
"
{1}
"
,
tick1,
tick2)
;
/* Get result from Equals*/
bool
result=
DateTime.
Equals(
one,
two)
;
bool
result1=
DateTime.
Equals(
time1,
time2)
;
bool
result2=
DateTime.
Equals(
dt1,
dt2)
;
bool
result3=
DateTime.
Equals(
newdays1,
newdays2)
;
Console.
WriteLine(
"
The result is:
"
+
result)
;
//Output: True
Console.
WriteLine(
"
The result is:
"
+
result1)
;
//Output: True
Console.
WriteLine(
"
The result is:
"
+
result2)
;
//Output: True
Console.
WriteLine(
"
The result is:
"
+
result3)
;
//Output: True/False
– Ở ví dụ trên, các phép sánh giữa 2 ngày bằng nhau hoặc khởi tạo thời gian cụ thể thì cho ra kết quả luôn chính xác là True, hoặc khác nhau là False. Trong ví dụ có giá trị:
DateTime.
NowThì câu lệnh này có nghĩa là thời gian sẽ bằng thời gian của hệ thống tại thời điểm đó. Khác với câu lệnh:
DateTime.
TodayCâu lệnh này chỉ lấy ra ngày tháng năm của ngày hiện tạo. Phần thời gian mặc định 12:00:00 AM
– Đối với lệnh Now nếu chương trình đọc xong lệnh thứ nhất chuyển qua lệnh thứ hai sẽ có độ trễ, nếu nhanh có thể không. Nên kết quả Result3 có thể là True hoặc False, không xác định. Đó là demo để so sánh thế, thực ra bình thường cũng không có ai so sánh thời gian hiện tại với hiện tại như thế cả.
Chung quy lại một điều phương thức Equals này nếu muốn chính xác bạn cần xác định các giá trị thời gian cần so sánh cần phải cụ thể, vì hàm này so sánh sâu tới giá trị nhỏ nhất mà C# hỗ trợ chỉ cần thay đổi rất nhỏ cũng thay đổi kết quả trả về. Nói lại, Ticks ở đây là giá trị được chuyển đổi từ Ngày Tháng cụ thể nào đó. Nó lớn hơn 100 lần so với Nanoseconds (Nano giây). Ví dụ 27/09/2013 23:30 PM sẽ được quy ra một số nguyên long 64bit mà ta gọi là Ticks.
Demo:
To be continued . . .
Share
Happy Reading!
Xử Lý DateTime Trong C# – Phần 2
4
/
5
Oleh
Unknown
Oleh