Comment obtenir uniquement l'heure de la date-heure C # [fermé]


144

Supposons que j'ai la valeur 22/06/2009 10:00:00. Comment puis-je obtenir seulement 10h00 à partir de cette date.


15
S'agit-il d'une chaîne ou d'un DateTime?
Colin Burnett

Réponses:


202

Vous avez de nombreuses options pour cela:

DateTime dt = DateTime.Parse("6/22/2009 07:00:00 AM");

dt.ToString("HH:mm"); // 07:00 // 24 hour clock // hour is always 2 digits
dt.ToString("hh:mm tt"); // 07:00 AM // 12 hour clock // hour is always 2 digits
dt.ToString("H:mm"); // 7:00 // 24 hour clock
dt.ToString("h:mm tt"); // 7:00 AM // 12 hour clock

Lien utile: Modèles DateTime.ToString ()


16
@MetroSmurf - l'OP n'est bien sûr pas clair ce qu'il veut faire. Un de mes animaux déteste est d'aller trop tôt. J'ai eu un collègue qui a tout converti en corde - même en double, etc. C'est un accident qui attend. Je dirais de ne pas convertir les objets en chaînes tant que vous ne souhaitez pas afficher l'objet à un humain. Jusque-là, restez avec les objets.
paul

1
Pour référence rapide, sscorrespond aux secondes avec un zéro snon
significatif

meilleure réponse jusqu'à présent
Tk1993

76

À partir de a DateTime, vous pouvez utiliser .TimeOfDay- mais cela vous donne une TimeSpanreprésentation de l'heure dans la journée (10 heures).


ou cas particuliers avec formatage sur ToString ("codes de format")
kenny

61

Il n'y a que le type DateTime en C # et il se compose à la fois de la partie date et heure. Si vous ne vous souciez pas de la partie Date de DateTime, définissez-la sur la valeur par défaut comme suit:

DateTime myTime = default(DateTime).Add(myDateTime.TimeOfDay)

De cette façon, vous pouvez être cohérent dans toutes les versions de .NET, même si Microsoft décide de changer la date de base en autre chose que 1/1/0001.


19
Cela devrait être la réponse acceptée. La question était d'extraire l'heure d'un DateTime, pas de le formater sous forme de chaîne.
ASalazar

Plus précisément, c'est "en .NET" et non "en C #".
rory.ap

22

Vous souhaiterez peut-être examiner la méthode DateTime.ToShortTimeString () .

En outre, il existe de nombreuses autres méthodes et propriétés sur l' objet DateTime qui peuvent vous aider à formater la date ou l'heure de la manière que vous souhaitez. Jetez un œil à la documentation.


+1 C'est la solution la plus propre, si vous exécutez dans un environnement international avec une exigence de localisation de la sortie de l'heure, car elle renvoie l'heure dans le format sur lequel le système actuel a été défini.
aggaton


6

Il existe différentes manières de procéder. Vous pouvez utiliser DateTime.Now.ToLongTimeString()qui renvoie uniquement l'heure au format chaîne.


Vous vouliez probablement DateTime.ToLongTimeString()plutôt que DateTime.Now.ToLongTimeString(). Compte tenu de l'âge de ce fil, mieux vaut ne pas le ressusciter à moins que la réponse n'apporte une amélioration significative par rapport aux réponses précédentes.
Leigh

5

Vous pouvez simplement écrire

string time = dateTimeObect.ToString("HH:mm");

4
cela n'ajoute absolument rien à ce qui a déjà été soumis il y a plus de 4 ans!
paul

5

Vous pouvez utiliser ceci

lblTime.Text = DateTime.Now.TimeOfDay.ToString(); 

Il est en temps réel avec une valeur en millisecondes et se règle uniquement sur l'heure.


TimeOfDay est un bon moyen, mais il apporte également une partie en millisecondes dont vous avez besoin pour formater votre temps avec le type standard.
sajadre le

5
DateTime now = DateTime.Now;

now.ToLongDateString();    // Wednesday, January 2, 2019
now.ToLongTimeString();    // 2:33:59 PM
now.ToShortDateString();   // 1/2/2019
now.ToShortTimeString();   // 2:16 PM
now.ToString();            // 1/2/2019 2:33:59 PM

4

Cela fonctionne pour moi. Je l'ai découvert quand je devais travailler avec DateTime.Date pour obtenir uniquement la partie date.

var wholeDate = DateTime.Parse("6/22/2009 10:00:00 AM");
var time = wholeDate - wholeDate.Date;

3

Vous pouvez utiliser ToString("T")pendant longtemps ou ToString("t")pour une courte période.


2

si vous utilisez gridview, vous ne pouvez afficher que l'heure avec l' DataFormatString="{0:t}" exemple:

    By bind the value:-
<asp:Label ID="lblreg" runat="server" Text='<%#Eval("Registration_Time ", "{0:t}") %>'></asp:Label>

By bound filed:-
<asp:BoundField DataField=" Registration_Time" HeaderText="Brithday" SortExpression=" Registration Time " DataFormatString="{0:t}"/>

1

Si vous cherchez à comparer les heures, et non les dates, vous pouvez simplement avoir une date de comparaison standard ou correspondre à la date que vous utilisez, comme dans ...

DateTime time = DateTime.Parse("6/22/2009 10:00AM");
DateTime compare = DateTime.Parse(time.ToShortDateString() + " 2:00PM");
bool greater = (time > compare);

Il existe peut-être de meilleures façons d'y parvenir, mais gardez les dates correspondantes.


1

Vous devez également tenir compte de DateTime Kind.

public static DateTime GetTime(this DateTime d)
{
    return new DateTime(d.TimeOfDay.Ticks, d.Kind);
}

Inutile de répondre à cette question, elle a été posée il y a 9 ans. Il existe également de nombreuses bonnes réponses à cette question.
benshabatnoam

Vous ne renvoyez pas l'heure. Vous devriez revoir votre réponse
Yepeekai

@Yepeekai Il n'y a pas de classe Time dans .NET. Ainsi, une instance DateTime sans partie Date est l'une des options que vous pouvez faire. Vous pouvez également renvoyer une chaîne, mais vous pouvez l'utiliser dans les opérations DateTime. Je suppose que vous pourriez aussi envisager un TimeSpan.
user3720899

imo le "nouveau DateTime (d.TimeOfDay.Ticks)" est la réponse la plus claire à ce jour
Fabianus
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.