95 votes

Convertir la valeur de l'intervalle de temps au format "hh:mm Am/Pm" en utilisant C#

J'ai une valeur stockée dans une variable de type System.TimeSpan comme suit.

System.TimeSpan storedTime = 03:00:00;

Puis-je le re-stocker dans une autre variable de type String comme suit ?

String displayValue = "03:00 AM";

Et si storedTime La variable a la valeur de

storedTime = 16:00:00;

alors il doit être converti en :

String displayValue = "04:00 PM";

9voto

Michal Klouda Points 8603

Vous devrez obtenir un DateTime de votre TimeSpan et vous pourrez alors le formater facilement.

Une solution possible consiste à ajouter la durée à toute date dont la valeur temporelle est nulle.

var timespan = new TimeSpan(3, 0, 0);
var output = new DateTime().Add(timespan).ToString("hh:mm tt");

La valeur de la sortie sera "03:00 AM" (pour la langue anglaise).

6voto

Curiousity Points 563

Vous ne pouvez pas ajouter AM / PM à un TimeSpan . Vous devrez de toute façon associer le TimaSpan avec DateTime si vous souhaitez afficher l'heure au format 12 heures.

TimeSpan n'est pas destiné à être utilisé avec un format d'horloge de 12 heures, car nous parlons d'une intervalle de temps ici.

Comme il est dit dans le documentation ;

A TimeSpan représente un intervalle de temps (durée du temps ou temps écoulé) qui est mesuré en tant que positif ou négatif nombre de jours, d'heures, de minutes, de secondes et de fractions de seconde. Le site TimeSpan peut également être utilisée pour représenter l'heure de la journée, mais uniquement si l'heure n'est pas liée à une date particulière. Dans le cas contraire, la structure DateTime o DateTimeOffset doit être utilisée à la place.

Aussi Microsoft Docs décrit comme suit ;

A TimeSpan peut être représentée comme suit [-]d.hh:mm:ss.ff où le signe moins (facultatif) indique un intervalle de temps négatif, le symbole d est de plusieurs jours, hh correspond aux heures mesurées sur un Horloge de 24 heures , mm est de quelques minutes, ss correspond aux secondes, et ff est une fraction de seconde.

Donc, dans ce cas, vous pouvez afficher en utilisant AM/PM comme suit.

TimeSpan storedTime = new TimeSpan(03,00,00);
string displayValue = new DateTime().Add(storedTime).ToString("hh:mm tt");

Note complémentaire :
Il convient également de noter que le Heure du jour propriété de DateTime est un TimeSpan où il représente

a intervalle de temps qui représente la fraction du jour qui s'est écoulée depuis minuit.

5voto

Thomas Phaneuf Points 196

Pour éviter les limitations du format temporel, convertissez en date. L'expression la plus simple serait :

// Where value is a TimeSpan...
(new DateTime() + value).ToString("hh:mm tt");

3voto

Habib Points 93087

Traitez la période en DateTime et utilisez ensuite le format ("hh:mm:tt"). Par exemple.

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 le sera :

str = "04:00 PM"

2voto

Ankit Points 320

Vous pouvez essayer ceci :

   string timeexample= string.Format("{0:hh:mm:ss tt}", DateTime.Now);

vous pouvez enlever hh ou mm ou ss ou tt selon votre besoin où hh est l'heure en format 12 heures, mm est la minute, ss est la seconde, et tt est AM/PM.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X