Tôi đã nghĩ về vấn đề của bạn và có một khía cạnh mà tôi đã bỏ lỡ hôm qua. Tôi nghĩ rằng chức năng Format
không có ý nghĩa, nhưng, ngay cả khi nó trông lạ, nó có thể có ý nghĩa. Hãy để tôi giải thích.
Trong VB6 chúng ta có
tAvailableDate = DateAdd("d", 21, Format(Now, gDATEFORMAT))
Tại sao nó trông lạ (hoặc thậm chí sai)? Now
là Date
. Format
chuyển đổi ngày này thành một số String
(tốt đến một số Variant
có chứa số String
chính xác), nhưng DateAdd
cần thông số Date
để có thể thêm ngày. DateAdd
được khai báo như thế này:
Function DateAdd(Interval As String, Number As Double, Date)
Thay vì đưa ra một cảnh báo hoặc một lỗi biên dịch, VB6 âm thầm chuyển đổi chuỗi này trở lại một Date
và vượt qua nó để DateAdd
. Vì vậy, giả định đầu tiên của tôi là chỉ cần thả này Format
.
NHƯNG Format
này có thể có hiệu quả mong muốn trên kết quả, tùy thuộc vào cách gDATEFORMAT
được xác định. Nếu gDATEFORMAT
chỉ chứa một phần ngày, chức năng định dạng sẽ thả phần thời gian!Tuy nhiên điều này chỉ đơn giản là có thể đạt được bằng cách sử dụng các chức năng Date
thay vì sử dụng Now
hàm trong VB6
tAvailableDate = DateAdd("d", 21, Date)
hoặc DateTime.Today
trong .NET (C# hoặc VB.NET).
Nhưng gDATEFORMAT
chỉ có thể chứa tháng và năm. VB6 (sử dụng ngôn ngữ Thụy Sĩ của tôi):
Date ==> 27.06.2012
Format(Date,"MM.yyyy") ==> "06.2012"
CDate(Format(Date,"MM.yyyy")) ==> 01.06.2012
Như bạn có thể thấy, định dạng ngày sẽ có hiệu lực để quay trở lại ngày đầu tiên của tháng hiện tại trong trường hợp này. Bằng cách thêm 21 ngày, bạn sẽ luôn nhận được ngày 22 của tháng hiện tại. Điều này hoàn toàn khác với việc thêm 21 ngày vào ngày hiện tại! Trong C# bạn có thể đạt được cùng với
DateTime today = DateTime.Today;
tAvailableDate = new DateTime(today.Year, today.Month, 22);
Để quyết định cách tiếp cận là đúng, bạn phải biết những gì gDATEFORMAT
chứa hoặc, nếu điều này có thể thay đổi, định dạng ngày và sau đó phân tích chuỗi kết quả để có được một lại một lần nữa.
Bạn đang cố gắng đạt được điều gì? Nếu bạn có thể cho chúng tôi biết rằng, bạn sẽ chỉ cần những người biết .NET, chứ không phải những người biết .NET * và * VB6. –