2010-06-20 48 views
6

Quiero obtener las horas de la fecha y hora. Así que si es 13:00 solo será 1 si es 22:00 será 10. Por lo tanto no hay lugar cero para estar en horas 1-9Formato Excepción: fecha y hora

por lo que trató de hacer esto

DateTime test= DateTime.Now; 
Console.WriteLine(test.ToString("h")); 

consigo este

System.FormatException fue controlada
Mensaje cadena = entrada no estaba en un formato correcto . Fuente = mscorlib
StackTrace: en System.DateTimeFormat.GetRealFormat (String formato, DateTimeFormatInfo DTFI) en System.DateTimeFormat.ExpandPredefinedFormat (String formato, DateTime & fecha y hora, DateTimeFormatInfo & DTFI, TimeSpan & offset) en System.DateTimeFormat.Format (DateTime fecha y hora, formato de cadena, DateTimeFormatInfo DTFI, TimeSpan offset) en System.DateTimeFormat.Format (DateTime fecha y hora, formato de cadena, DateTimeFor matInfo DTFI) en System.DateTime.ToString (String formato) en ConsoleApplication1.Program.Main (String [] args) en C: \ Users \ chobo2 \ documentos \ Visual Studio 2010 \ Projects \ ConsoleApplication1 \ ConsoleApplication1 \ Program.cs: línea en System.AppDomain._nExecuteAssembly (RuntimeAssembly montaje, args String []) en System.AppDomain.ExecuteAssembly (String assemblyFile, Evidencia assemblySecurity, String [] args) en Microsoft .VisualStudio.HostingProcess.HostProc.RunUsersAssembly() en System.Threading.ThreadHelper.Thre adStart_Context (Object estado ) en System.Threading.ExecutionContext.Run (ExecutionContext executionContext, ContextCallback de devolución de llamada, el estado del objeto, Boolean ignoreSyncCtx) en System.Threading.ExecutionContext.Run (ExecutionContext executionContext, ContextCallback de devolución de llamada, de objetos estado) en System.Threading.ThreadHelper.ThreadStart() InnerException:

Respuesta

13

de MSDN (la "h" especificador de formato personalizado):

Si el especificador de formato "h" se usa sin otros especificadores de formato personalizados, se interpreta como un especificador de formato de fecha y hora estándar y arroja una excepción FormatException. Para obtener más información sobre el uso de un único especificador de formato, consulte Uso de especificadores de formato único personalizados más adelante en este tema.

Usted puede utilizar el siguiente (as described en "Uso Individual personalizados especificadores de formato)":

Para utilizar cualquiera de los de fecha y formato de hora especificadores como el único especificador en una cadena de formato (que es, para usar la "d", "f", "F", "g", "h", "H", "K", "m", "M", "s", "t", " y "," z ",": "o"/"especificador de formato personalizado por sí mismo), incluya un espacio antes o después del especificador, o incluya un especificador de formato de porcentaje ("% ") antes del único especificador personalizado de fecha y hora .

lo tanto, puede hacer lo siguiente:

DateTime test= DateTime.Now; 
Console.WriteLine(test.ToString("{0:%h}")); // From the document, adds precision 
Console.WriteLine(test.ToString("%h")); // Will also work 
+0

Ya he encontrado algo acerca de% h, pero no comprendían por qué lo necesitas. http://msdn.microsoft.com/en-us/library/system.datetime.hour.aspx – chobo2

+0

+1. Aunque no debería ser 'Console.WriteLine (test.ToString ("% h "));'? –

+0

@David Neale - ambos funcionarían. El '0:' es un especificador de precisión, por si acaso. – Oded