2012-01-26 9 views
5

Próbuję wyświetlić pole datetime, używając fragmentu godziny tylko bez początkowych zer dla godzin jednocyfrowych, jak w: return string.Format("{0:h}", MyDateTimefield), ale Otrzymuję komunikat "Ciąg wejściowy nie był w poprawnym formacie". Czemu?Błąd "Ciąg wejściowy nie był w poprawnym formacie" podczas próby wyświetlenia części godziny za pomocą 'h'

return string.Format("{0:hh}", MyDateTimefield) działa. Poszukuje poprawnego formatu, a nie obejścia.

+0

Czy MyDateTimefield typu 'DateTime'? Pytam, ponieważ jeśli tak jest, prawdopodobnie po prostu zwrócisz 'MyDateTimefield.ToString (" h ");' – pstrjds

+0

@pstrjds, który zgłasza ten sam błąd. –

+0

Wiem, że nie chcesz obejść problemu, ale MyDateTimefield.Hour.ToString() będzie działać. –

Odpowiedz

14

Od the pertinent docs:

Jeśli „h” format specifier jest używany bez innych specyfikatorów formatu niestandardowego, jest interpretowany jako standardowy format daty i czasu specyfikatorem i rzuca FormatException. Aby uzyskać więcej informacji na temat korzystania ze specyfikatora jednego formatu, zobacz temat Using Single Custom Format Specifiers w dalszej części tego tematu.

następstwie tego linku dostaje się do:

użycie dowolnego z datą zwyczaj i format czasu specyfikatorami jako jedyny specyfikatorem w ciągu formatu [...], to miejsce przed lub po specyfikatorem lub dołączyć specyfikator formatu procentowego ("%") przed pojedynczym niestandardowym specyfikatorem daty i czasu.

+1

+1 Dobre znalezisko, nie wiedziałem o problemie z pojedynczym znakiem. – pstrjds

+0

Użyłem dwóch różnych formatów kodów kreskowych i nie wspomniałem o specyfikatorach pojedynczego formatu. Dzięki! –

2

Od this link wykorzystaniem h jest poprawny format godziny bez wiodącym 0. Bardzo ciekawy .. następujących wszystko wydaje się działać:

return string.Format("{0: h}", MyDateTimefield) 
return string.Format("{0:h }", MyDateTimefield) 
return string.Format("{0:h:m}", MyDateTimefield) 

Ale jak tylko można umieścić w return string.Format("{0:h}", MyDateTimefield) zgłasza wyjątek .

Co do tego, nie jestem pewien. Jeśli wszystko jest w porządku, pierwsze 2 wiersze powinny działać.

+0

Powodem, dla którego nie działa, jest to, że najwyraźniej łańcuchy znaków jednoliterowych są specjalne w .NET i są interpretowane jako "specyfikatory standardowego formatu". – millimoose

+0

Po prostu przeczytaj odpowiedź. Dobre znalezisko. Czytałem tę samą stronę msdn, ale wydawało mi się, że po prostu zupełnie pomijam tę sekcję :) – Lester

Powiązane problemy