Tengo un valor almacenado en una variable de tipo de la System.TimeSpan
siguiente manera.
System.TimeSpan storedTime = 03:00:00;
¿Puedo volver a almacenarlo en otra variable del tipo String
siguiente?
String displayValue = "03:00 AM";
Y si la storedTime
variable tiene el valor de
storedTime = 16:00:00;
entonces debería convertirse a:
String displayValue = "04:00 PM";
datepicker value + TimeofDay
:?ShortTimePattern
en su lugar:string displayTime = time.ToString("t" [, culture]);
time.ToShortTimeString()
Muy simple usando el formato de cadena
en
.ToSTring("") :
si usa "hh" - >> La hora, usando un reloj de 12 horas de 01 a 12.
si usa "HH" - >> La hora, usando un reloj de 24 horas de 00 a 23.
si agrega "tt" - >> El designador Am / Pm.
ejemplo de 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 Cultura porque el mismo código ejecutado en Windows con otro idioma, especialmente con diferentes idiomas culturales, generará un resultado diferente con el mismo código
Un ejemplo de ventanas configuradas para la cultura del idioma árabe se mostrará así:
// 23:12 م
م significa Tarde (primera letra de مساء).
en otra cultura del sistema dependerá 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 (cuadro combinado) y cambiar ... aplicarlo hacer una reconstrucción (ejecutar) de su aplicación y ver de qué está hablando iam.
Entonces, ¿a quién puedo obligar a mostrar las palabras Am y Pm en un evento en inglés si la cultura del sistema actual no está configurada en inglés?
fácil con solo agregar dos líneas: ->
el primer paso agrega
using System.Globalization;
encima de tu códigoy 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 de inglés predeterminado.
otra pregunta Quiero que el pm esté en árabe o en un idioma específico, incluso si uso Windows configurado en formato regional en inglés (u otro idioma).
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 en inglés. puede cambiar "ar-AE" si desea otro formato de idioma. hay una lista de cada idioma y su formato.
ejemplos: ar ar-SA árabe ar-BH ar-BH árabe (Bahréin) ar-DZ ar-DZ árabe (Argelia) ar-EG ar-EG árabe (Egipto)
fuente
Puede agregar el
TimeSpan
aDateTime
, 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 de formato de fecha y hora estándar
fuente
11:57 pm
y funcionó:TimeSpan time = new TimeSpan(23, 57, 00); DateTime date_with_time = mydate.Add(time);
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 un DateTime (punto en el tiempo). Puede formatear un DateTime sin la parte de la fecha, esa sería su cadena deseada.
TimeSpan t1 = ...; DateTime d1 = DateTime.Today + t1; // any date will do string result = d1.ToString("hh:mm:ss tt");
No, puede tener un valor de 4 en punto pero la representación es binaria, un TimeSpan no puede registrar la diferencia entre
16:00
y4 pm
.fuente
DateTime.TimeOfDay
devuelva unTimeSpan
- Microsoft lo lleva a este diseño :(DateTime
, si lo hubiera, entonces esto ("03:00 AM") sería simplemente una instancia de eso. Sin embargo, puedo ver que para la mayoría de los casos de uso, ese diseño (un parienteDateTime
) complicaría demasiado los problemas (por supuesto, esto es a expensas de hacerlo más complicado para hacer un trabajo muy específico alrededor de fechas, horas, absolutas o no). , zonas horarias, etc.)DateTime
aún más (ya es suficientemente malo). Debería haber un tipo que represente una "hora del día", que es, por supuesto, exactamente lo que he implementado en Noda Time. Siempre que intente agrupar muchos conceptos diferentes en una pequeña cantidad de tipos, seguramente tendrá problemas como este.DateTime
,TimeOfDay
yDate
.03:00 AM
no es un "punto en el tiempo". Es un "punto en un día".Aprovechando las 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(); }
fuente
Necesitará obtener un
DateTime
objeto de suTimeSpan
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).fuente
No puede agregar AM / PM a un
TimeSpan
. De todos modos, tendrá que asociar elTimaSpan
valor conDateTime
si desea mostrar la hora en formato de reloj de 12 horas.TimeSpan
no está diseñado para usarse con un formato de reloj de 12 horas, porque aquí estamos hablando de un intervalo de tiempo .Como dice la documentación ;
También Microsoft Docs describe lo siguiente;
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 aTimeSpan
, donde representafuente
Analice el intervalo de tiempo en 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
estarán:str = "04:00 PM"
fuente
Puedes probar esto:
string timeexample= string.Format("{0:hh:mm:ss tt}", DateTime.Now);
puede eliminar hh o mm o ss o tt según sus necesidades, donde hh es la hora en formato de 12 horas, mm son minutos, ss son segundos y tt es AM / PM.
fuente
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; }
fuente
Al principio, debe convertir el intervalo de tiempo a la estructura DateTime:
var dt = new DateTime(2000, 12, 1, timeSpan.Hours, timeSpan.Minutes, timeSpan.Seconds)
Luego debe convertir el valor en una cadena con formato de tiempo corto
var result = dt.ToString("t"); // Convert to string using Short Time format
fuente