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.

Tyler Durden
la source
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 ()

Théofanis Pantelides
la source
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).

Marc Gravell
la source
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.

panpawel
la source
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.

lourd
la source
+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
11

Essaye ça:

TimeSpan TodayTime = DateTime.Now.TimeOfDay;
Javier Andres Caicedo
la source
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.

tarakaram gopal
la source
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");
Kishan Gupta
la source
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.

Chrysanly
la source
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
Görkem Hacıoğlu
la source
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;
ProfK
la source
3

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

tapis de sol
la source
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}"/>
Bipul Roy
la source
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.

Hugoware
la source
1

Vous devez également tenir compte de DateTime Kind.

public static DateTime GetTime(this DateTime d)
{
    return new DateTime(d.TimeOfDay.Ticks, d.Kind);
}
user3720899
la source
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