web-dev-qa-db-fra.com

Comment puis-je obtenir la valeur AM / PM d'un DateTime?

Le code en question est ci-dessous:

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()
    + " "
    ????????????????
}

comment puis-je obtenir AM/PM à partir de la valeur dateTime?

181
SilverLight

Que diriez-vous:

dateTime.ToString("tt", CultureInfo.InvariantCulture);
329
Andy
string.Format("{0:hh:mm:ss tt}", DateTime.Now)

Cela devrait vous donner la valeur de chaîne de l'heure. tt devrait ajouter le am/pm.

Vous pouvez également consulter le sujet connexe:

Comment obtenez-vous l'heure actuelle?

99
XikiryoX

La DateTime doit toujours figurer en interne dans le calendrier "américain" (grégorien). Donc si tu le fais

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

vous devriez obtenir ce que vous voulez en moins de lignes.

41
xanatos

Très simple en utilisant le format de chaîne

sur .ToSTring("") :

  • si vous utilisez "hh" - >> L’heure, en utilisant une horloge de 12 heures, du 01 au 12.

  • si vous utilisez "HH" - >> L’heure, en utilisant une horloge de 24 heures, du 00 au 23.

  • si vous ajoutez "tt" - >> Le désignateur Am/Pm.

exemple conversion de 23h12 à 23h12:

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();

attendez une seconde, ce n’est pas tout ce dont vous avez besoin pour vous soucier de quelque chose d’autre, c’est le système Culture car le même code exécuté sur des fenêtres avec un autre langage, en particulier avec un langage de culture différent, produira un résultat différent avec le même code

l’exemple de windows paramétré en arabe sera affiché comme suit:

// 23:12 م

م signifie Soir (premier mètre de مساء).

dans un autre système, la culture dépend de l'option définie dans les options régionales et linguistiques de Windows. // 23:12 du s'affiche.

vous pouvez basculer entre différents formats sur le panneau de configuration de Windows sous Windows régional et langue -> format actuel (liste déroulante) et le modifier ... appliquez-le pour reconstruire (exécuter) votre application et regardez ce dont iam parle.

alors, qui puis-je forcer à montrer l'événement Am et Pm Words en anglais si> la culture du système actuel n'est pas définie en anglais?

facile en ajoutant simplement deux lignes: ->

la première étape, ajoutez using System.Globalization; en plus de votre code

et en modifiant le code précédent pour qu'il ressemble à ceci:

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 => en utilisant le format anglais par défaut.

une autre question je veux avoir le pm être en arabe ou une langue spécifique, même si j'utilise des fenêtres réglées au format régional anglais (ou autre langue)?

Soution pour l'arabe Exemple:

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

cela montrera // 23:12 م

événement si mon système est réglé sur un format de région anglaise. vous pouvez changer "ar-AE" si vous voulez un autre format de langue. il y a une liste de chaque langue et son format.

exemples:

ar          ar-SA       Arabic
ar-BH       ar-BH       Arabic (Bahrain)
ar-DZ       ar-DZ       Arabic (Algeria)
ar-EG       ar-EG       Arabic (Egypt)

big list...

faites-moi savoir si vous avez une autre question.

27
Bilal

c'est assez simple

  Date someDate = new DateTime();
  string timeOfDay = someDate.ToString("hh:mm tt"); 
  // hh - shows hour and mm - shows minute - tt - shows AM or PM
9
Jamisco

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

string.Format("{0:t tt}", datetime);  // -> "P PM"  or "A AM"
8
Baptiste Pernet
+ PC.GetHour(datetime) > 11 ? "pm" : "am"

Pour votre exemple, mais il existe de meilleures façons de formater date-heure.

8
Kevin Holditch

Quelque chose comme bool isPM = GetHour() > 11. Mais si vous souhaitez formater une date en chaîne, vous ne devriez pas avoir à le faire vous-même. Utilisez les formatage de la date pour cela.

4
CodesInChaos

Vous pouvez le tester de cette façon

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

Le résultat sera comme ceci:

AM

ou

PM
1
yazarloo

Voici un moyen plus simple d’écrire le format d’heure (hh:mm:ss tt) et de les afficher séparément si vous le souhaitez.

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

ou tout simplement:

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