2012-06-26 45 views
6

Tôi có đoạn code sau trong vb -Chuyển đổi DateAdd và mã Format từ VB6 sang C#

tAvailableDate = DateAdd("d", 21, Format(Now, gDATEFORMAT)) 

Tôi đang cố gắng để chuyển đổi này vào C#.

tôi đã chuyển đổi này cho đến nay -

tAvailableDate = DateAdd("d", 21, Format (DateTime.Now, Global.gDATEFORMAT)); 

Nhưng tôi không thể tìm thấy một sự thay thế cho tính năng DateAdd() hoặc Format().

Bất kỳ ý tưởng nào? Cảm ơn.

+6

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. –

Trả lời

11

DateAdd là phương pháp VB6 cũ được chuyển sang VB.NET để tương thích ngược. Bạn cũng có thể làm cho nó hoạt động trong C# nếu bạn đưa vào không gian tên Microsoft.VisualBasic trong dự án C# của mình, nhưng tôi sẽ không khuyên bạn sử dụng phương thức trong C# hoặc VB.NET. Dưới đây là cách bạn nên làm điều đó (dễ đọc hơn):

tAvailableDate = DateTime.Now.AddDays(21); 
+0

Điều đó hoạt động hoàn hảo. Cảm ơn bạn. Theo dõi, tôi cũng có trong một chuỗi SQL (vẫn còn vb6) - Định dạng (tAvailableDate, gDATEFORMAT) Đối với C# tôi có thể chỉ cần làm điều đó - tAvailableDate. ? –

+0

Để chuyển đổi đối tượng 'DateTime' thành một chuỗi, sử dụng phương thức' ToString', chẳng hạn như: 'tAvailableDate.ToString (gDATEFORMAT)' –

+0

OK. Cảm ơn đã giúp đỡ. –

10

VB6 của tôi hơi bị gỉ, nhưng nếu tôi nhớ lại, bạn đang cố thêm 21 ngày. Vì vậy, đây là những gì bạn muốn làm:

tAvailableDate = DateTime.Now.AddDays(21); 

CẬP NHẬT

Bạn nói rằng bạn chuyển biến đến một DateTime từ một string. Nếu bạn cần để có được nó trở lại một string (mà có vẻ như bạn có thể từ bình luận khác), sau đó bạn muốn gọi:

tAvailableDate.ToString("[format string]"); 

Để được trợ giúp về định dạng chuỗi của bạn theo cách bạn muốn, xem: http://msdn.microsoft.com/en-us/library/az4se3k1.aspx

+2

+1. Có, nó không có ý nghĩa để chuyển đổi thành chuỗi với định dạng và sau đó để cố gắng thêm ngày. Ngày có thể được thêm vào ngày nhưng không được thêm vào chuỗi. Có lẽ nó làm việc với VB6, beacuse VB6 tự động chuyển đổi chuỗi trở lại 'Date' và do đó mặt nạ lỗi này! Nhưng nếu nó chuyển đổi nó trở lại bằng cách sử dụng một nền văn hóa khác hơn quy định trong 'gDATEFORMAT' nó có thể tạo ra một lỗi (bằng cách đảo ngược ngày và tháng ví dụ). –

+0

Cảm ơn sự giúp đỡ của bạn. Mã đó hoạt động hoàn hảo. Để loại bỏ Định dạng trong VB6 khi viết mã C# của tôi, tôi khai báo ngày có sẵn là một DateTime như trái ngược với một chuỗi. –

+0

Theo dõi, tôi cũng có trong một chuỗi SQL (vẫn còn vb6) - Định dạng (tAvailableDate, gDATEFORMAT) Đối với C# tôi chỉ có thể làm điều đó - tAvailableDate. ? –

0

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)? NowDate. 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.