2013-03-30 17 views

Odpowiedz

29

można otoczyć dosłowne ciągi z cytatów, które na dłuższe ciągi jest prawdopodobnie łatwiejsze i nieco bardziej czytelny niż ucieczce każdy znak z odwrotnym ukośnikiem:

str = String.Format("{0:MMM d 'at' m:mm"+yearStr+"}", dt); 

Zobacz Custom Date and Time Format Strings w MSDN Library (wyszukiwania dla „ciągiem znaków ogranicznik ").

(A pan myśli h:mm zamiast m:mm?)

+0

To rozwiązanie sprawdziło się najlepiej, inne odpowiedzi, nie pozwoliły mi użyć wielu bloków {} .. – Baconbeastnz

+0

(A może nawet 'H: mm' z kapitałem' H'?) –

+0

@JeppeStigNielsen: Dobrze. –

9
string.Format(@"{0:MMM d \a\t m:mm" + yearStr + "}", dt); 

Uwaga podwójny wyciek - Kiedyś ciąg varbatim więc byłem w stanie napisać \ wewnątrz łańcucha jako normalnego charakteru. Procedura formatowania dla DateTime następnie interpretuje to (ponownie) jako sekwencję specjalną.

Oto prostszy wariant:

string.Format("{0:MMM d} at {0:m:mm" + yearStr + "}", dt); 

Pierwszy wariant może być uznane przez niektórych obrzydliwe. Ten ostatni jest jednak bardzo czytelny.

+0

+1 Próbowałem odpowiedzieć 'string str = String.Format (" {0: MMM} w {1: dm: mm "+ yearStr +"} ", dt, dt);', ale myślę, że twoje jest lepiej. – Steve

+0

dlaczego używać "\" przed a. Myślę, że \ t zadziała – Kashif

+1

@MuhammadKashifNadeem to może zadziałać, ale mnie to nie obchodzi. Chcę mieć pewność, że jest poprawny i chcę, aby był spójny. – usr

2

Tylko dla zabawy, ale działa.

var what=new object[] { "{{{{0:MMM d}}}} {0} {{{{0:m:mm:{{0}}}}}}", "at", yearStr, dt }; 
var that=what.Aggregate((a, b) => String.Format((String)a, b)); 

Można łączyć dwie linie w jedną. Zostanie również sparametryzowana wersja at, którą chcesz umieścić między dwoma formatami.