Comment puis-je obtenir la valeur AM/PM à partir d'une DateTime?

le code en question Est le suivant:

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 L'AM/PM à partir de la valeur dateTime ?

164
demandé sur Brian Webster 2011-10-24 15:58:36

13 réponses

Que Diriez-vous de:

dateTime.ToString("tt", CultureInfo.InvariantCulture);
306
répondu Andy 2015-06-24 11:41:40
string.Format("{0:hh:mm:ss tt}", DateTime.Now)

cela devrait vous donner la valeur de chaîne de caractères du temps. tt devrait annexer le am / pm.

vous pouvez également regarder le sujet connexe:

Comment obtenir l'heure actuelle de la journée?

91
répondu XikiryoX 2017-05-23 10:31:37

le DateTime doit toujours figurer à l'intérieur du calendrier "américain" (grégorien). Donc si vous faites

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

, vous devriez obtenir ce que vous voulez dans beaucoup moins de lignes.

38
répondu xanatos 2011-10-24 12:10:41

très simple en utilisant le format de chaîne de caractères

sur .ToSTring("") :

  • si vous utilisez " hh " - > > l'heure, en utilisant une horloge de 12 heures de 01 à 12.

  • si vous utilisez " HH " - > > l'heure, en utilisant une horloge de 24 heures de 00 à 23.

  • si vous ajoutez " tt " - > > l'indicatif Am/Pm.

exemple conversion de 23: 12 à 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();

attendez une seconde qui n'est pas tout ce dont vous avez besoin pour vous soucier d'autre chose est la Culture du système parce que le même code exécuté sur windows avec un autre langage en particulier avec la culture différente langage générera le résultat différent avec le même code

exemple de fenêtres placées à la culture du langage arabe montrera comme cela:

/ / 23: 12 م

signifie Le soir (première lettre de مساء).

dans une autre culture de système dépendent de ce qui est placé sur l'option régionale de windows et la langue, il affichera // 23:12 du.

vous pouvez changer entre le format différent sur le panneau de configuration de windows sous windows régional et la langue -> le format actuel (combobox) et changer... l'appliquer faire une reconstruction (exécuter) de votre application et de regarder ce que iam parle.

alors qui Puis-je forcer afficher les mots Am et Pm en anglais événement si la culture du > système actuel n'est pas réglée sur l'anglais ?

facile juste en ajoutant deux lignes: - >

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

et modifier le code précédent pour être comme 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 => utilisation de la valeur par défaut Format anglais.

une autre question je veux avoir le pm à être en arabe ou en langue spécifique, même si j'utilise windows anglais (ou autre langue) format régional?

source for Arabic Exemple:

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

il affiche // 23:12 م

si mon système est configuré au format 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 .

21
répondu Bilal 2018-01-11 11:20:01

je sais que cela pourrait sembler très tard.. cependant, il peut aider quelqu'un là-bas

je voulais obtenir la partie AM PM de la date, donc j'ai utilisé ce Qu'Andy a conseillé:

dateTime.ToString("tt");

j'ai utilisé cette partie pour construire un chemin pour enregistrer mes fichiers.. J'ai construit mes hypothèses que je vais obtenir soit suis ou PM et rien d'autre !!

cependant quand j'ai utilisé un PC que sa culture n'est pas l'anglais ..( dans mon cas en ARABE) .. ma demande échoué parce que le format " tt " retourné quelque chose de nouveau, pas AM ni PM (م ou Pollen)..

donc, la solution à cela était d'ignorer la culture en ajoutant le deuxième argument comme suit:

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

.. bien sûr, il faut ajouter: utiliser le système.La mondialisation; ur de fichier J'espère que cela va aider quelqu'un :)

16
répondu searchingSO 2014-02-03 03:49:33
+ PC.GetHour(datetime) > 11 ? "pm" : "am"

pour votre exemple, mais il y a de meilleures façons de formater datetime.

7
répondu Kevin Holditch 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
répondu Baptiste Pernet 2011-10-24 12:07:07

quelque chose comme bool isPM = GetHour() > 11 . Mais si vous voulez formater une date en une chaîne de caractères, vous ne devriez pas avoir à le faire vous-même. Utilisez les fonctions date formatting pour cela.

4
répondu CodesInChaos 2011-10-24 12:00:38

son 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
2
répondu Jamisco 2018-06-04 22:16:05

vous pouvez le tester de cette façon

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

La sortie sera comme ceci:

AM

ou

PM
1
répondu yazarloo 2016-05-30 11:07:38

voici un moyen plus facile vous pouvez écrire le format de temps (hh:mm:ss tt) et 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")
-1
répondu Zero 2015-11-19 14:30:19

voici un exemple de code:

DateTime time = DateTime.Now;
string AM_PM;
AM_PM = time.ToLongTimeString().Substring(time.ToLongTimeString().Length - 2);
-2
répondu Praveen Manupati 2014-02-21 03:44:19
string AM_PM = string.Format("{0:hh:mm:ss tt}", DateTime.Now).Split(new char[]{' '})[1];
-2
répondu Shah Bdr 2014-07-31 05:49:30