2011-01-27 19 views

Respuesta

7

Lo que 'volver a ver es formatear problema en lugar de datos problema. Realmente es 00:00:00, pero sin importar si lo está convirtiendo en una cadena, se muestra como 12:00:00, presumiblemente con una "am" implícita. No olvide que un DateTime no tiene realmente tiene un formato, es solo la fecha/hora. Puede formatearlo de manera apropiada usted mismo, p.

Console.WriteLine(a1.ToString("yyyy-MM-dd HH:mm:ss")); 

Todo esto a un lado, no te recomiendo que no se crea el DateTime de esta manera. Personalmente, prefiero usar DateTime.TryParseExact o DateTime.ParseExact de todos modos, en lugar de usar "cualquier patrón que prefiera la cultura actual", pero aunque haga quiere analizar con Convert.ToDateTime, sería más claro hacerlo una vez, y luego usar el Date propiedad para obtener un DateTime con el tiempo se pone a 0:

DateTime a1 = Convert.ToDateTime(txtStartDate.Text).Date; 
1

Bueno, técnicamente no hay tiempo que 00:00:00. Después de las 11:59:59 se convierte en 12:00:00. Tal vez no estoy entendiendo lo que estás tratando de hacer :)

Podrías tener una lógica especial en tu código que la modifique de modo que si es 12:00:00, entonces la muestre como 00:00: 00 o algo así Pero de fábrica no hay una cadena mágica o de formato que haga esto.

+2

incorrecto. 12:00 a medianoche (12:00 a.m.) es en realidad 00:00:00 según el formato de reloj de 24 horas. – Yogesh

+0

@Yogesh, lo sé. Supongo que no entiendo la pregunta. Pensé que HH era la forma de representar el modo de 24 horas y que no tiene nada que ver con el tiempo del sistema. Entonces, ¿qué es todo eso? –

1

Se podría simplificar esto un poco mediante la especificación de un formato:

DateTime a1 = DateTime.Parse(string.Format("{0} 00:00:00", "01/27/2011"), 
             CultureInfo.GetCultureInfo("en-US")); 

No sé qué formato el cuadro de texto es, pero asumiendo que es 01/27/2011 (formato US) puede cambiar el por encima de fragmento para trabajar fácilmente:

DateTime a1 = DateTime.Parse(string.Format("{0} 00:00:00", txtStartDate.Text), 
             CultureInfo.GetCultureInfo("en-US")); 

Cambiar el CultureInfo.GetCultureInfo (que implementa IFormatProvider) a la que usted está utilizando. Idealmente, debería analizar la fecha en una fecha UTC, pero esa es una discusión diferente.

datetime

0

Cuando se desea añadir un objeto DateTime en una cadena o quiere mostrarlo en algún tipo de texto, el ToString() - método se utiliza de forma automática. ToString() usa "en-US" como cultura predeterminada. Por supuesto, puede llamar manualmente a ToString() y parametrizarlo con cualquier CultureInfo que desee, pero a veces eso no es posible.

Cuando accede a DateTime-objects a través de Databinding, por ejemplo, no puede pasar ningún CultureInfo y terminar con una cadena de fecha localizada en "en-US". En este caso es necesario establecer CultureInfo para el subproceso actual como:

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de-DE"); 

Después de esta línea se llama todas las fechas serán localizados en el "de-DE" siempre y cuando no se llama manualmente ToString() con un CultureInfo diferente.

tener una lectura en este enlace: https://msdn.microsoft.com/en-us/library/k494fzbf(v=vs.110).aspx

0

Se podría simplificar que

if (!string.IsNullOrEmpty(txtStartDate.Text)) 
      { 
       string startDate = Convert.ToDateTime(txtStartDate.Text).ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture); 
      } 
Cuestiones relacionadas