2012-06-26 11 views
6

Mam następujący kod w VB -Konwersja DateAdd i kod Format z VB6 do C#

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

Ja próbuje przekształcić to w C#.

Mam konwertowane to do tej pory -

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

Ale nie mogę znaleźć zastępstwo dla funkcji DateAdd() lub Format().

Wszelkie pomysły? Dzięki.

+6

Co próbujesz osiągnąć? Jeśli możesz nam to powiedzieć, potrzebujesz tylko ludzi, którzy znają .NET, a nie ludzi, którzy znają .NET * i * VB6. –

Odpowiedz

11

DateAdd to stara metoda VB6, która została przeniesiona do VB.NET w celu zapewnienia kompatybilności wstecznej. Możesz go uruchomić także w języku C#, jeśli uwzględniliśmy przestrzeń nazw Microsoft.VisualBasic w twoim projekcie C#, ale nie poleciłbym używania tej metody w C# lub VB.NET. Oto, jak należy to robić (to łatwiejsze do odczytania zbyt):

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

To działa idealnie. Dziękuję Ci. Jako kontynuację mam również ciąg SQL (nadal vb6) - Format (tAvailableDate, gDATEFORMAT) Dla C# i można po prostu zrobić - tAvailableDate. ? –

+0

Aby przekonwertować obiekt 'DateTime' na ciąg, użyj metody' ToString', na przykład: 'tAvailableDate.ToString (gDATEFORMAT)' –

+0

OK. Dzięki za pomoc. –

10

Mój VB6 jest nieco zardzewiały, ale jeśli pamiętam, próbujesz dodać 21 dni. Więc tutaj jest to, co chcesz zrobić:

tAvailableDate = DateTime.Now.AddDays(21); 

UPDATE

Wspomniałeś, że przekształcone zmienną do DateTime z string. Jeśli chcesz dostać go z powrotem do string (która wygląda jak ty może z innym komentarzu), a następnie chcesz zadzwonić:

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

Aby uzyskać pomoc na temat formatowania ciąg tak, jak chcesz, zobacz: http://msdn.microsoft.com/en-us/library/az4se3k1.aspx

+2

+1. Tak, nie ma sensu konwertować na ciąg znaków przy użyciu formatu, a następnie próbować dodawać dni. Dni można dodawać do dat, ale nie do ciągów. Prawdopodobnie działa z VB6, ponieważ VB6 automatycznie konwertuje ciąg z powrotem na "Date" i tym samym maskuje ten błąd! Ale jeśli przekształci to z powrotem w inną kulturę niż określona w 'gDATEFORMAT' może to spowodować błąd (np. Przez odwrócenie dni i miesięcy). –

+0

Dzięki za pomoc. Ten kod działał idealnie. Aby pozbyć się formatu w VB6 podczas pisania mojego kodu C#, zadeklarowałem tAvailable date jako DateTime w przeciwieństwie do napisu. –

+0

Jako kontynuacja mam również w ciąg SQL (nadal vb6) - Format (tAvailableDate, gDATEFORMAT) Dla C# i można po prostu dokonać - tAvailableDate. ? –

0

myślałem nad swoim problemem i nie jest to aspekt, że brakowało mi wczoraj. Pomyślałem, że funkcja Format nie ma sensu, ale nawet jeśli wygląda dziwnie, może mieć sens. Pozwól mi wyjaśnić.

W VB6 mamy

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

Dlaczego to wygląda dziwnie (lub nawet źle)? Now to Date. Format zamienia tę datę na String (oraz na Variant zawierającą dokładnie String), ale DateAdd potrzebuje parametru Date, aby móc dodać dni. DateAdd jest zadeklarowana następująco:

Function DateAdd(Interval As String, Number As Double, Date) 

Zamiast dawać ostrzeżenie lub błąd kompilatora, VB6 dyskretnie konwertuje ten ciąg z powrotem do Date i przekazuje go do DateAdd. Więc moim pierwszym założeniem było po prostu upuścić ten Format.

ALE ten Format może mieć pożądany efekt na wyniku, w zależności od tego, jak zdefiniowano gDATEFORMAT. Jeśli gDATEFORMAT zawiera tylko część daty, funkcja formatowania spowoduje zrzucenie części czasu!Jednak może to być po prostu osiągnąć za pomocą funkcji Date zamiast używania funkcji Now w VB6

tAvailableDate = DateAdd("d", 21, Date) 

lub DateTime.Today w .NET (C# lub VB.NET).

Ale gDATEFORMAT może zawierać tylko miesiąc i rok. VB6 (używając mojego szwajcarskiego locale):

Date ==> 27.06.2012 
Format(Date,"MM.yyyy") ==> "06.2012" 
CDate(Format(Date,"MM.yyyy")) ==> 01.06.2012 

Jak widać, formatowanie daty miałoby skutek powrotu pierwszego dnia bieżącego miesiąca w tym przypadku. Dodając 21 dni, zawsze otrzymasz 22 dnia bieżącego miesiąca. To zupełnie coś innego niż dodanie 21 dni do bieżącej daty! W języku C# można osiągnąć to samo z

DateTime today = DateTime.Today; 
tAvailableDate = new DateTime(today.Year, today.Month, 22); 

w celu stwierdzenia, które podejście jest poprawne, trzeba albo znać co gDATEFORMAT zawiera lub, jeżeli jest to zmienna, formatować datę i następnie zanalizować wynikowy ciąg, aby uzyskać Data ponownie.