¿Cómo obtengo el valor AM / PM de una fecha y hora?


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 el AM/PM del valor dateTime?

Author: Brian Webster, 2011-10-24

13 answers

Qué tal:

dateTime.ToString("tt", CultureInfo.InvariantCulture);
 306
Author: Andy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-24 11:41:40
string.Format("{0:hh:mm:ss tt}", DateTime.Now)

Esto debería darle el valor de cadena del tiempo. tt debe adjuntar el am / pm.

También puede ver el tema relacionado:

¿Cómo se obtiene la hora actual del día?

 91
Author: XikiryoX,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 10:31:37

El DateTime siempre debe estar internamente en el calendario "americano" (gregoriano). Así que si lo haces

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

Deberías conseguir lo que quieres en muchas menos líneas.

 38
Author: xanatos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-24 12:10:41

Muy simple usando el formato de cadena

On .ToSTring("") :

  • Si usa " hh " - > > La hora, use un reloj de 12 horas de 01 a 12.

  • Si utiliza " HH " - > > La hora, utilizando 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 la Cultura del sistema porque el mismo código ejecutado en Windows con otros idiomas especialy with difrent culture langage generará un resultado diferente con el mismo código

Ejemplo de windows establecido en la cultura del idioma árabe se mostrará así:

// 23:12 م

م significa Noche (primera letra de مساء) .

En otra cultura del sistema depende de lo que se establece en la opción de idioma y regional de Windows, se mostrará // 23:12 du.

Puede cambiar entre diferentes formatos en el control de Windows panel bajo windows regional e idioma - > formato actual (combobox) y cambio... hacer una reconstrucción (ejecutar)de su aplicación y ver lo que estoy hablando.

Entonces, ¿a quién puedo forzar a mostrar Palabras Am y Pm en el evento inglés si la cultura del sistema >actual no está establecida en inglés ?

Fácil simplemente añadiendo 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 => using default English Format.

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 árabe Ejemplo:

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       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 .

 21
Author: Bilal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-11 11:20:01

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

Quería obtener la parte AM PM de la fecha, así que usé lo que Andy aconsejó:

dateTime.ToString("tt");

Usé esa parte para construir una ruta para guardar mis archivos.. Construí mis suposiciones de que obtendré AM o PM y nada más !!

Sin embargo, cuando usé un PC que su cultura no es inglés ..(en mi caso ÁRABE).. mi aplicación falló porque el formato " tt " devolvió algo nuevo no SOY ni PM (م or ص)..

Así que la solución a esto era ignorar la cultura agregando el segundo argumento de la siguiente manera:

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

.. por supuesto u tiene que añadir: usando el sistema.Globalization; on top of ur file Espero que ayude a alguien :)

 16
Author: searchingSO,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-03 03:49:33
+ PC.GetHour(datetime) > 11 ? "pm" : "am"

Para su ejemplo, pero hay mejores formas de formatear datetime.

 7
Author: Kevin Holditch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-24 12:01:56

De: http://www.csharp-examples.net/string-format-datetime/

string.Format("{0:t tt}", datetime);  // -> "P PM"  or "A AM"
 7
Author: Baptiste Pernet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-24 12:07:07

Algo así como bool isPM = GetHour() > 11. Pero si desea formatear una fecha en una cadena, no debería tener que hacerlo usted mismo. Utilice las funciones date formatting para ello.

 4
Author: CodesInChaos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-10-24 12:00:38

Es bastante simple

  Date someDate = new DateTime();
  string timeOfDay = someDate.ToString("hh:mm tt"); 
  // hh - shows hour and mm - shows minute - tt - shows AM or PM
 2
Author: Jamisco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-04 22:16:05

Puedes probarlo de esta manera

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

La salida será así:

AM

O

PM
 1
Author: yazarloo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-30 11:07:38

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")
 -1
Author: Zero,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-19 14:30:19

Aquí hay un código de ejemplo:

DateTime time = DateTime.Now;
string AM_PM;
AM_PM = time.ToLongTimeString().Substring(time.ToLongTimeString().Length - 2);
 -2
Author: Praveen Manupati,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-21 03:44:19
string AM_PM = string.Format("{0:hh:mm:ss tt}", DateTime.Now).Split(new char[]{' '})[1];
 -2
Author: Shah Bdr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-31 05:49:30