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";

210voto

Asif Mushtaq Points 7943

Vous pouvez le faire en ajoutant votre période de temps à la date.

TimeSpan timespan = new TimeSpan(03,00,00);
DateTime time = DateTime.Today.Add(timespan);
string displayTime = time.ToString("hh:mm tt"); // It will give "03:00 AM"

14voto

Bilal Points 918

Très simple en utilisant le format 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 de 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, il y a un piège, le système Culture ! !, le même code exécuté sur Windows réglé sur une langue différente surtout avec une langue de culture différente, générera un résultat différent.

par exemple, dans Windows réglé sur la langue arabe, le résultat sera le suivant :

// 23:12 م

م signifie Soirée (première lettre de مساء) .

sous Windows réglé sur la langue allemande, je pense qu'il affichera // 23:12 du.

vous pouvez changer de format dans le panneau de configuration de Windows sous Windows regional and language -> current format (combobox) et changer... appliquez-le, faites une reconstruction (execute) de votre application et regardez ce dont je parle.

Comment pouvez-vous forcer l'affichage des préfixes Am et Pm en anglais si la culture du système actuel n'est pas en anglais ?

facile en ajoutant simplement deux lignes ->

la première étape ajoute using System.Globalization; au dessus de votre code

et modifier le code précédent pour qu'il soit 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 du format anglais par défaut.

Une autre question : je veux que le pm soit en arabe ou dans une langue spécifique, même si j'utilise Windows réglé sur le format régional anglais (ou autre langue) ?

Solution pour arabe Exemple :

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

this will show // 23:12 م

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

exemples : ar ar-SA Arabe ar-BH ar-BH Arabe (Bahreïn) ar-DZ ar-DZ Arabe (Algérie) ar-EG ar-EG Arabe (Egypte) .....

12voto

Tim Schmelter Points 163781

Vous pouvez ajouter le TimeSpan à un DateTime par exemple :

TimeSpan span = TimeSpan.FromHours(16);
DateTime time = DateTime.Today + span;
String result = time.ToString("hh:mm tt");

Démonstration : http://ideone.com/veJ6tT

04:00 PM

Chaînes de format de date et d'heure standard

12voto

Chris Marisic Points 11495

Je fais un peu de pigmentation à partir des réponses existantes ici :

public static string ToShortTimeSafe(this TimeSpan timeSpan)
{
    return new DateTime().Add(timeSpan).ToShortTimeString();
} 

public static string ToShortTimeSafe(this TimeSpan? timeSpan)
{
    return timeSpan == null ? string.Empty : timeSpan.Value.ToShortTimeSafe();
}

11voto

Henk Holterman Points 153608
string displayValue="03:00 AM";

Il s'agit d'un moment donné et non un durée (TimeSpan).

Il y a donc un problème avec votre conception de base ou vos hypothèses.

Si vous souhaitez l'utiliser, vous devrez d'abord le convertir en DateTime (point dans le temps). Vous pouvez formater un DateTime sans la partie date, ce qui correspondrait à la chaîne souhaitée.

TimeSpan t1 = ...;
DateTime d1 = DateTime.Today + t1;               // any date will do
string result = d1.ToString("hh:mm:ss tt");

La variable storeTime peut avoir une valeur comme
storeTime=16:00:00;

Non, il peut avoir une valeur de 4 heures mais la représentation est binaire, un TimeSpan ne peut pas enregistrer la différence entre 16:00 y 4 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