7
votes

Comment obtenir la date de 12 heures de DateTime

Quand je reçois la propriété DateTime.Hour, j'ai toujours le temps de 24 heures (dedon 18h me donnerait 18).

Comment puis-je obtenir le temps de "12 heures" de sorte que 18h00 me donne juste 6.

Je peux évidemment faire le chèque moi-même mais je suppose qu'il y a une fonction intégrée pour cela.


3 commentaires

Vous pouvez simplement lui demander, ou voulez-vous dire dentetim e ?


Si vous faites cela, comment pouvez-vous comparer entre les heures de nuit et la nuit?


Je n'ai pas besoin de pour ce contrôle. . . Comme il existe des zones de texte séparées pour "heure" "min" "am / pm". Je vais déplacer cela à un contrôle de calendrier pour en faire simple car il s'agit de tout le code hérité


6 Réponses :


24
votes

Que diriez-vous: xxx

qui donnera 0-11 bien sûr ... voulez-vous 1-12? Si oui: xxx

Je ne pense pas Il y a quelque chose de plus simple intégré ...


0 commentaires

1
votes

Il n'y a pas de fonction intégrée, principalement parce que vous ne devriez pas en avoir besoin:

  • Si vous faites cela pour la sortie à l'utilisateur, consultez l'utilisation d'une chaîne de format.
  • Si vous faites cela pour un calcul, vous pouvez soustraire directement les DateTimes ou ajouter des horaires directement.

    En dehors de cela, le calcul mathématique est assez simple et déjà disponible dans d'autres réponses ici.


2 commentaires

Je fais des comparaisons d'heure par rapport à un entier que je reçois d'une autre source de données (qui ne vient évidemment que pendant 12 heures)


Ne devriez-vous pas convertir cette autre source à une date d'heure? Comparer aveuglément 12 heures de temps est dangereuse.



7
votes

datetime.now.tostring ("HH"); -> Utiliser ce problème, vous obtiendrez "06" pendant 18h.


1 commentaires

C'est la réponse la plus simple imo.



3
votes

Je ne connais aucune méthode intégrée, mais vous pouvez toujours ajouter une méthode d'extension pour y accomplir.

Bien sûr, vous pouvez toujours remplacer le code par la façon dont vous voulez y accomplir. P >

public static class Extension
{
    public static int GetTwelveCycleHour(this DateTime dateTime)
    {
        if (dateTime.Hour > 12)
        {
            return dateTime.Hour - 12;
        }

        return dateTime.Hour;
    }
}


2 commentaires

J'ai réalisé qu'après avoir posté ma réponse, j'ai ajouté le commentaire "Bien sûr, vous pouvez toujours remplacer le code avec la façon dont vous voulez y accomplir." Mon point principal était que cette question me pose sonne comme un bon candidat pour une méthode d'extension.


Je ne voulais pas simplement déchirer la réponse de Jon Skeet dans la mienne, alors je n'ai ajouté que le commentaire et je n'ai pas changé le code.



2
votes

Qu'en est-il de simplement:

public static int GetTwelveCycleHour(this DateTime dateTime)
{
    return Convert.ToInt32(dateTime.ToString("h"));
}


2 commentaires

Formatage et analyse? Cela fera l'affaire, mais est inutilement inutile de cycles de la CPU. Enregistrer le formatage pour afficher la sortie et analyser pour la manipulation de la saisie de l'utilisateur. Vous êtes beaucoup mieux avec la réponse de Jon Skeet.


Pas sûr de la version C # que vous utilisez mais dans le C # 5, cela jette une exception de format invalide. Il devrait s'agir de tosturer ("% h");



0
votes

Je pensais que la réponse la plus pratique a été soumise par Jon Skeet. Le ci-dessous est le même mais converti en Visual Basic. J'aime que les choses soient super faciles. Il m'a fallu quelques-uns pour comprendre le C # à la conversion de base visuelle. J'ai également inclus des choses «supplémentaires» aussi. J'espère que cela sauve l'heure de quelqu'un d'autre.

Visual Basic fort> P>

Dim stringDate = DateTime.Now().Year &
                 DateTime.Now().Month.ToString("00") &
                 DateTime.Now().Day.ToString("00") & "_" &
                 (((DateTime.Now().Hour + 11) Mod 12) + 1).ToString("00") &
                 DateTime.Now().Minute.ToString("00")


0 commentaires