net hora formato fecha c# .net datetime datetime-format gregorian-calendar

c# - hora - ¿Cómo obtengo el valor AM/PM de un DateTime?



formato fecha c# (12)

Algo así como bool isPM = GetHour() > 11 . Pero si desea formatear una fecha en una cadena, no debería necesitar hacer esto usted mismo. Use las funciones de formato de fecha para eso.

El código en cuestión está a continuación:

public static string ChangePersianDate(DateTime dateTime) { System.Globalization.GregorianCalendar PC = new System.Globalization.GregorianCalendar(); PC.CalendarType = System.Globalization.GregorianCalendarTypes.USEnglish; return PC.GetYear(dateTime).ToString() + "/" + PC.GetMonth(dateTime).ToString() + "/" + PC.GetDayOfMonth(dateTime).ToString() + "" + PC.GetHour(dateTime).ToString() + ":" + PC.GetMinute(dateTime).ToString() + ":" + PC.GetSecond(dateTime).ToString() + " " ???????????????? }

¿cómo puedo obtener AM / PM del valor de dateTime ?


Aquí hay un código de ejemplo:

DateTime time = DateTime.Now; string AM_PM; AM_PM = time.ToLongTimeString().Substring(time.ToLongTimeString().Length - 2);


Aquí hay una manera más fácil de escribir el formato de hora (hh:mm:ss tt) y mostrarlos por separado si lo desea.

string time = DateTime.Now.Hour.ToString("00") + ":" + DateTime.Now.Minute.ToString("00") + ":" + DateTime.Now.Second.ToString("00") + DateTime.Now.ToString(" tt");

o simplemente:

DateTime.Now.ToString("hh:mm:ss tt")



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 las palabras Am y Pm 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 Arabic ar-BH ar-BH Arabic (Bahrain) ar-DZ ar-DZ Arabic (Algeria) ar-EG ar-EG Arabic (Egypt) big list...

hazme saber si tienes otra pregunta.


Puedes probarlo de esta manera

Console.WriteLine(DateTime.Now.ToString("tt "));

La salida será así:

AM

o

PM


Qué tal si:

dateTime.ToString("tt", CultureInfo.InvariantCulture);


Sé que esto puede parecer muy tarde ... sin embargo, puede ayudar a alguien por ahí

Quería que AM PM fuera parte de la cita, así que usé lo que Andy me aconsejó:

dateTime.ToString("tt");

Utilicé esa parte para construir un Camino para guardar mis archivos. ¡Creé mis suposiciones de que obtendré AM o PM y nada más!

sin embargo, cuando utilicé una PC, su cultura no es inglesa ... (en mi caso ARABIC) .. mi aplicación falló porque el formato "tt" devolvió algo nuevo no AM ni PM (م o ص) ...

Entonces la solución a esto fue ignorar la cultura agregando el segundo argumento de la siguiente manera:

dateTime.ToString("tt", CultureInfo.InvariantCulture);

.. por supuesto tienes que agregar: usando System.Globalization; en la parte superior de tu archivo espero que ayude a alguien :)


DateTime siempre debe estar internamente en el calendario "americano" (gregoriano). Entonces si lo haces

var str = dateTime.ToString(@"yyyy/MM/dd hh:mm:ss tt", new CultureInfo("en-US"));

deberías obtener lo que quieres en muchas menos líneas.


+ PC.GetHour(datetime) > 11 ? "pm" : "am"

Para su ejemplo, existen mejores formas de formatear la fecha y hora.


string AM_PM = string.Format("{0:hh:mm:ss tt}", DateTime.Now).Split(new char[]{'' ''})[1];