Convierta el valor del intervalo de tiempo para formatear “hh: mm Am / Pm” usando C #

Tengo un valor almacenado en la variable de tipo System.TimeSpan siguiente manera.

 System.TimeSpan storedTime = 03:00:00; 

¿Puedo volver a almacenarlo en otra variable de tipo String siguiente manera?

 String displayValue = "03:00 AM"; 

Y si la variable storedTime tiene el valor de

 storedTime = 16:00:00; 

entonces debería convertirse a:

 String displayValue = "04:00 PM"; 

Puede hacer esto agregando su intervalo de tiempo a la fecha.

 TimeSpan timespan = new TimeSpan(03,00,00); DateTime time = DateTime.Today.Add(timespan); string displayTime = time.ToString("hh:mm tt"); // It will give "03:00 AM" 

Muy simple al usar el formato de cadena

en .ToSTring("") :

  • si usa “hh” – >> La hora, usando un reloj de 12 horas del 01 al 12.

  • si usa “HH” – >> La hora, usando un reloj de 24 horas de 00 a 23.

  • si agrega “tt” – >> El designador Am / Pm.

ejemplo, conversión de 23:12 a 11:12 Pm:

 DateTime d = new DateTime(1, 1, 1, 23, 12, 0); var res = d.ToString("hh:mm tt"); // this show 11:12 Pm var res2 = d.ToString("HH:mm"); // this show 23:12 Console.WriteLine(res); Console.WriteLine(res2); Console.Read(); 

espere un segundo que no es todo lo que necesita para preocuparse por otra cosa es el sistema de Cultura porque el mismo código ejecutado en Windows con otro idioma, especialmente con diferentes idiomas, generará un resultado diferente con el mismo código.

ejemplo de ventanas configuradas en cultura langage árabe se mostrará así:

// 23:12 م

م significa Tarde (primer leter de مساء).

en otro sistema, la cultura depende de lo que esté configurado en la opción regional y de idioma de Windows, se mostrará // 23:12 du.

puede cambiar entre diferentes formatos en el panel de control de windows en Windows regional e idioma -> formato actual (combobox) y cambiar … aplicarlo hacer una reconstrucción (ejecución) de su aplicación y ver de qué está hablando iam.

Entonces, ¿a quién puedo obligar a mostrar Am y Pm Words en inglés si la cultura del sistema actual no está configurada en inglés?

fácil simplemente agregando dos líneas: ->

el primer paso agrega using System.Globalization; encima de tu código

y modificando el código anterior para que sea así:

 DateTime d = new DateTime(1, 1, 1, 23, 12, 0); var res = d.ToString("HH:mm tt", CultureInfo.InvariantCulture); // this show 11:12 Pm 

InvariantCulture => usando el formato inglés predeterminado.

otra pregunta Quiero que el pm sea en árabe o en un idioma específico, incluso si utilizo Windows configurado en inglés (u otro idioma) formato regional.

Soution para el ejemplo árabe:

 DateTime d = new DateTime(1, 1, 1, 23, 12, 0); var res = d.ToString("HH:mm tt", CultureInfo.CreateSpecificCulture("ar-AE")); 

esto mostrará // 23:12 م

evento si mi sistema está configurado en un formato de región inglesa. puede cambiar “ar-AE” si quiere otro formato de idioma. hay una lista de cada idioma y su formato.

ejemplos: ar ar-SA árabe ar-BH ar-BH árabe (Bahrein) ar-DZ ar-DZ arábigo (Argelia) ar-EG ar-EG árabe (Egipto)

Puede agregar TimeSpan a DateTime , por ejemplo:

 TimeSpan span = TimeSpan.FromHours(16); DateTime time = DateTime.Today + span; String result = time.ToString("hh:mm tt"); 

Demostración: http://ideone.com/veJ6tT

 04:00 PM 

Cadenas estándar de formato de fecha y hora

Haciendo algunos piggybacking de respuestas existentes aquí:

 public static string ToShortTimeSafe(this TimeSpan timeSpan) { return new DateTime().Add(timeSpan).ToShortTimeString(); } public static string ToShortTimeSafe(this TimeSpan? timeSpan) { return timeSpan == null ? string.Empty : timeSpan.Value.ToShortTimeSafe(); } 
 string displayValue="03:00 AM"; 

Este es un punto en el tiempo , no una duración (TimeSpan).

Entonces algo está mal con su diseño básico o suposiciones.

Si desea usarlo, primero deberá convertirlo a DateTime (punto en el tiempo). Puede formatear un DateTime sin la parte de fecha, que sería la cadena deseada.

 TimeSpan t1 = ...; DateTime d1 = DateTime.Today + t1; // any date will do string result = d1.ToString("hh:mm:ss tt"); 

La variable storeTime puede tener un valor como
storeTime=16:00:00;

No, puede tener un valor de 4 en punto, pero la representación es binaria, un TimeSpan no puede registrar la diferencia entre las 16:00 y las 16:00 4 pm

Deberá obtener un objeto DateTime de su TimeSpan y luego podrá formatearlo fácilmente.

Una posible solución es agregar el intervalo de tiempo a cualquier fecha con valor de tiempo cero.

 var timespan = new TimeSpan(3, 0, 0); var output = new DateTime().Add(timespan).ToString("hh:mm tt"); 

El valor de salida será "03:00 AM" (para la configuración regional en inglés).

Analice el intervalo de tiempo con DateTime y luego use Format (“hh: mm: tt”). Por ejemplo.

 TimeSpan ts = new TimeSpan(16, 00, 00); DateTime dtTemp = DateTime.ParseExact(ts.ToString(), "HH:mm:ss", CultureInfo.InvariantCulture); string str = dtTemp.ToString("hh:mm tt"); 

str será:

 str = "04:00 PM" 

Puedes intentar esto:

  string timeexample= string.Format("{0:hh:mm:ss tt}", DateTime.Now); 

puede eliminar hh o mm o ss o tt según su necesidad, donde hh es hora en formato de 12 horas, mm es minutos, ss es segundos yt es AM / PM.

No puede agregar AM / PM a un TimeSpan . De todos modos, deberá asociar el valor de TimaSpan con DateTime si desea mostrar la hora en formato de reloj de 12 horas.

TimeSpan no está destinado a usarse con un formato de reloj de 12 horas, porque estamos hablando de un intervalo de tiempo aquí.

Como dice en la documentación ;

Un objeto TimeSpan representa un intervalo de tiempo (duración de tiempo o tiempo transcurrido) que se mide como un número positivo o negativo de días, horas, minutos, segundos y fracciones de segundo. La estructura TimeSpan también se puede usar para representar la hora del día, pero solo si la hora no está relacionada con una fecha en particular. De lo contrario, la estructura DateTime o DateTimeOffset debería utilizarse en su lugar.

También Microsoft Docs describe lo siguiente;

Un valor de TimeSpan se puede representar como [-]d.hh:mm:ss.ff , donde el signo de menos opcional indica un intervalo de tiempo negativo, el componente d es días, hh es horas como se midió en un reloj de 24 horas , mm es minutos, ss es segundos ff es fracciones de segundo.

Entonces, en este caso, puede mostrar usando AM / PM de la siguiente manera.

 TimeSpan storedTime = new TimeSpan(03,00,00); string displayValue = new DateTime().Add(storedTime).ToString("hh:mm tt"); 

Nota al margen :
También debe tener en cuenta que la propiedad TimeOfDay de DateTime es un TimeSpan , donde representa

un intervalo de tiempo que representa la fracción del día que ha transcurrido desde la medianoche.

Al principio, debe convertir el lapso de tiempo en estructura DateTime:

 var dt = new DateTime(2000, 12, 1, timeSpan.Hours, timeSpan.Minutes, timeSpan.Seconds) 

Entonces necesitas convertir el valor a cadena con formato de Tiempo Corto

 var result = dt.ToString("t"); // Convert to string using Short Time format 
 Parse timespan to DateTime. For Example. //The time will be "8.30 AM" or "10.00 PM" or any time like this format. public TimeSpan GetTimeSpanValue(string displayValue) { DateTime dateTime = DateTime.Now; if (displayValue.StartsWith("10") || displayValue.StartsWith("11") || displayValue.StartsWith("12")) dateTime = DateTime.ParseExact(displayValue, "hh:mm tt", CultureInfo.InvariantCulture); else dateTime = DateTime.ParseExact(displayValue, "h:mm tt", CultureInfo.InvariantCulture); return dateTime.TimeOfDay; }