2011-07-17 19 views
7

Estoy almacenando la hora del usuario en hora UTC y cuando la muestro necesito convertirla a la hora de la mañana.¿Cómo convertir el lapso de tiempo a pm o a la hora?

Aquí es ejemplo en la base de datos 17:00:00 He convertido a 5:00 pm

Aquí está el código de lo que me ocurrió hasta ahora, pero no está funcionando

var time = DateTime.ParseExact(object.Time.ToString(), "HHmm", CultureInfo.CurrentCulture).ToString("hh:mm tt"); 
+0

¿Tiene un intervalo de tiempo o una hora UTC? Eso no encaja. ¿Y qué es el 'ToString' y analizar de nuevo los negocios? – CodesInChaos

Respuesta

11
var time = DateTime.ParseExact("17:00", "HH:mm", null).ToString("hh:mm tt"); 

rendimientos 17:00

DateTime.ParseExact está volviendo DateTime

Editado:

Incluir CultureInfo

var time = DateTime.ParseExact("17:00", "HH:mm", null).ToString("hh:mm tt", CultureInfo.GetCultureInfo("en-US")); 
+1

Depende de 'CultureInfo.CurrentCulture'. Compruebe: 'var time = DateTime.ParseExact (" 17:00 "," HH: mm ", nulo) .ToString (" hh: mm tt ", CultureInfo.GetCultureInfo (" es-ES "));'. –

+0

Quiero decir, que para cultura 'es-ES' no muestra' AM/PM' ...:-) –

+0

@KirillPolishchuk: Podría ser bueno actualizar con este método de extensión: cadena pública pública ToAMPM (este intervalo de tiempo de TimeSpan) { DateTime dt = DateTime.ParseExact ("17:00", "HH: mm", nulo) ; var timeString = dt.ToString ("hh: mm tt", System.Globalization.CultureInfo.GetCultureInfo ("en-US")); return timeString; } – Lee

6

TimeSpan es una duración "17 horas", no un tiempo. ¿Tal vez agregar esto a una fecha (solamente) y usar las opciones de formato de fecha y hora existentes? (Aunque reloj al horario de verano)

decir

string s = DateTime.Today.Add(duration).ToString(specifier); 
2

No olvide especificar cultivo apropiado, por ejemplo .: CultureInfo.InvariantCulture.

var time = DateTime.Now.ToString("h:mm tt", CultureInfo.InvariantCulture); 

Ver también: Custom Date and Time Format Strings

2

Basado en su comentario, convertir primero el TimeSpan a un DateTime:

var dtUtc = DateTime.Now.ToUniversalTime(); 
dtUtc.AddHours(timeSpanObject.Hours); 
dtUtc.AddMinutes(timeSpanObject.Minutes); 

Una vez que se trata de un DateTime, puede convertirlo a UTC a la hora local:

var dtLocal = dtUtc.ToLocalTime(); 

Solo w gallina mostrar le tomaría incluir AM/PM, como:

dtLocal.ToString("h:mm tt"); 
+0

var time = Convert.ToDateTime (object.Time) .ToLocalTime(); No se ha podido lanzar el objeto de tipo 'System.TimeSpan' para escribir 'System.IConvertible'. object.Time es un intervalo de tiempo –

+0

@Andrew Venture: Publicación editada. Me pregunto cómo recuperar un objeto 'TimeSpan' de una base de datos; eso es bastante inusual! – Andomar

+0

@Andomar - SqlServer 2008 Express es compatible con TimeSpan. ;) – Luc

0

Solo necesitaba mostrar html estático con mi TimeSpan. Así que en mi opinión he usado,

DateTime.Today.Add(StartTime).ToString("%h:mm tt") 

"Hora de inicio" es mi TimeSpan, que la convierte en una fecha y hora y luego lo muestra. Mi tiempo ahora se muestra como "3:00 PM" en lugar de "15:00". El "% h" elimina un cero inicial para el tiempo que está entre 1-9.

Cuestiones relacionadas