IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Mette l'heure a zero dans un DateTime


Sujet :

C#

  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut Mette l'heure a zero dans un DateTime
    Bonjour

    Existe-il une maniere qui ne ressemble pas a un bricolage pour mettre l'heure a zéro dans un DateTime ?
    Ou de maniere plus générale d'assigner l'heure (le time) directement sans chipoter a la date ?

    La methode la plus directe que j'ai trouvé est celle ci mais elle implique de reassigner l'année le mois et le jour a chaque changement de time;

    Ca me semble un peu lourd pour etre la meilleure solution

    Merci pour vos suggestions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          dtpTimeFrom.Value = new DateTime(2000, 1, 1, 0, 0, 0);
          dtpTimeTo.Value = new DateTime(2000, 1, 1, 0, 0, 0);

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 100
    Par défaut
    Tu veux avoir la date actuel?

  3. #3
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Citation Envoyé par Inarius Voir le message
    Tu veux avoir la date actuel?
    Non !
    La question c'est :

    Mettre l'heure a zéro dans un DateTime
    Ou de maniere plus générale d'assigner l'heure (le time) directement sans chipoter a la date
    J'espère avoir loupé quelque chose car je trouve que la Classe DateTime est tout a fait inefficace pour le traitement distinct des Date et des Heures

    Par exemple dans une form j'ai présenté deux DateTimerPicker

    L'un permettant de choisier ne tate,
    L'autre permettant de choisir un Time

    Déja je trouve absurde que le DateTimePicker ne permette pas d'agir directement sur les deux

    Mais si je veux recomposer un DateTime basé sur cette date et ce Time il faut sauf erreur de ma part, ecrire un code d'une lourdeur grotesque


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
          DateTime D=dtpFrom.Value;
          DateTime T=dtpTimeFrom.Value;
          DateTime dtFrom = new DateTime(D.Year, D.Month, D.Day, T.Hour, T.Minute, T.Second);

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Par défaut
    DateTime.Date retourne la date sans l'heure
    DateTime.TimeOfDay retourne l'heure sans la date (TimeSpan)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DateTime a = new DateTime(2010,1,1);
    DateTime b = DateTime.Now;
    DateTime c = a.Add(b.TimeOfDay);

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    Dans ce cas, il vaut mieux DateTime.Today

  7. #7
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Ou de maniere plus générale d'assigner l'heure (le time) directement sans chipoter a la date
    Et donc ...
    Quelle est la meilleure proposition pour assigner un time sur DateTime donné

  8. #8
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    Citation Envoyé par realpasso Voir le message
    Dans ce cas, il vaut mieux DateTime.Today
    j'aime bien celle-là. ou alors, un new DateTime avec uniquement les parametres pour initialiser la date

  9. #9
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Bonjour

    Merci a tous mais ....

    J'ai peut etre mal posé la question
    Ou je n'ai peut etre pas donné des exemples asser clairs
    Ou bien j'ai du mal a comprendre

    Je reprends donc avec un exemple

    J'aimerais creer deux dates representant PAR EXEMPLE un intervalle entre
    Hier a 13h00
    Demain à 17h15

    Je peux representer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DateTime Hier=DateTime.Today.AddDay(-1);
    DateTime Demain=DateTime.Today.AddDay(+1);
    Mais ca ne me donne pas les heures

    Et me semble que devoir faire en plus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Hier=new DateTime(Hier.Year,Hier.Month,Hier.Day,17,0);
    Est absolument ridicule et fastidieux

    Mais en l'ecrivant, je pense que la solution c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          Hier=DateTime.Today.AddDays(-1).AddHours(13);
          Demain = DateTime.Today.AddDays(+1).AddHours(17).AddMinutes(15);

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Par défaut
    Citation Envoyé par olibara Voir le message
    Bonjour

    Merci a tous mais ....

    J'ai peut etre mal posé la question
    Ou je n'ai peut etre pas donné des exemples asser clairs
    Ou bien j'ai du mal a comprendre

    Je reprends donc avec un exemple

    J'aimerais creer deux dates representant PAR EXEMPLE un intervalle entre
    Hier a 13h00
    Demain à 17h15

    Je peux representer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DateTime Hier=DateTime.Today.AddDay(-1);
    DateTime Demain=DateTime.Today.AddDay(+1);
    Mais ca ne me donne pas les heures

    Et me semble que devoir faire en plus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Hier=new DateTime(Hier.Year,Hier.Month,Hier.Day,17,0);
    Est absolument ridicule et fastidieux

    Mais en l'ecrivant, je pense que la solution c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          Hier=DateTime.Today.AddDays(-1).AddHours(13);
          Demain = DateTime.Today.AddDays(+1).AddHours(17).AddMinutes(15);
    J'ai déjà répondu, ça me paraissait plus clair non?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DateTime hier13h15 = DateTime.Today.Add(new TimeSpan(-1, 13, 15, 0)); 
    DateTime demain17h15 = DateTime.Today.Add(new TimeSpan(1,17,15,0));

  11. #11
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2005
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2005
    Messages : 482
    Par défaut
    salut,
    tu vas sans doute rager olibara mais ... c'est comme ca ...
    tu as une DateTime qui peut représenter une Date/Heure et un TimeSpan qui représente des intervalles de temps...

    tu peux calculer des temps grâce à ces deux classes, que demander de plus ?
    comment veux tu que le programme connaisse "Hier à 17h15" si tu ne lui donnes pas l'heure et la date ? comment voudrais tu l'écrire autrement ?

    si tu as imaginé une classe mieux adaptée, il va te falloir l'implémenter; mais avec ces deux classes tu peux déjà quasiment tout faire.

  12. #12
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Bonjour

    Entre les deux mon coeur balance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DateTime  Hier=DateTime.Today.AddDays(-1).AddHours(13);0
    DateTime  Demain = DateTime.Today.AddDays(+1).AddHours(17).AddMinutes(15);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DateTime hier13h15 = DateTime.Today.Add(new TimeSpan(-1, 13, 15, 0)); 
    DateTime demain17h15 = DateTime.Today.Add(new TimeSpan(1,17,15,0));
    Mais je ne comprends pas bien pourquoi les propriétés
    Year,Month,Day,Hours,Minutes,Secondes ne sont pas publiques
    Ce serait quand meme plus simple non ?

    Citation Envoyé par themacleod1980
    comment veux tu que le programme connaisse "Hier à 17h15" si tu ne lui donnes pas l'heure et la date ? comment voudrais tu l'écrire autrement ?
    Tu ne pense pas que ceci serait parfois plus confortable ?

    DateTime Hier=DateTime.Today.AddDays(-1);
    Hier.Hours=17;
    Hier.Minutes=15;

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Par défaut
    Citation Envoyé par olibara Voir le message
    Mais je ne comprends pas bien pourquoi les propriétés
    Year,Month,Day,Hours,Minutes,Secondes ne sont pas publiques
    Ce serait quand meme plus simple non ?
    Parce que DateTime est immuable, comme String.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    DateTime.Today // 2 instances (DateTime.Now + .Date)
                     .AddDays(+1) // 1 instance
                           .AddHours(17) // 1 instance
                                 .AddMinutes(15); // 1 instance

  14. #14
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Citation Envoyé par realpasso
    Parce que DateTime est immuable, comme String.
    Merci realpasso
    Je comprends a présent la contrainte que je n'avais pas capté
    Mais autant je peux comprendre pour un string

    Autant ca me laisse perplexe pour une DateTime
    Personnelement je ne vois pas la raison imperative d'avoir fait de DateTime une classe immuable !

  15. #15
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 99
    Par défaut
    Citation Envoyé par olibara Voir le message
    Personnelement je ne vois pas la raison imperative d'avoir fait de DateTime une classe immuable !
    Dans l'absolu il n'y a aucune raison impérative mais les classes immuables ont le même avantage : une référence suffit à "connaître" l'objet. Sa "valeur" est connue à la construction, il est impossible qu'elle soit modifiée même si l'objet est passé par référence, il n'est pas nécessaire de le copier, il n'est pas nécessaire d'en synchroniser l'accès, on peut en faire une clef fiable, son implémentation est plus simple.

    J'avais lu un exellent papier sur les collections immuables mais je n'arrive plus à mettre la main dessus. Si je le retrouve je te le poste en MP.

  16. #16
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par olibara Voir le message
    Merci realpasso
    Je comprends a présent la contrainte que je n'avais pas capté
    Mais autant je peux comprendre pour un string

    Autant ca me laisse perplexe pour une DateTime
    Personnelement je ne vois pas la raison imperative d'avoir fait de DateTime une classe immuable !
    Parce que DateTime est une struct, et qu'il est presque toujours préférable de rendre les structs immutable.

    Prends un double, par exemple. Ca ne te viendrait pas à l'idée, pour obtenir 4.32 à partir de 4.99, de dire "je prend le double 4.99, je lui enlève sa partie décimale, que je remplace par 32" ? Bah là, c'est pareil.

    Saine lecture, dans le blog de l'un des concepteurs du compilo C#, qui explique par le menu pourquoi les structs mutable sont à proscrire : http://blogs.msdn.com/ericlippert/ar...y-structs.aspx

Discussions similaires

  1. Récupération heure dans variable datetime
    Par stefsas dans le forum SAS Base
    Réponses: 2
    Dernier message: 14/08/2008, 12h53
  2. Réponses: 3
    Dernier message: 25/09/2006, 16h39
  3. Réponses: 3
    Dernier message: 15/12/2005, 17h10
  4. [MySQL] non affichage d'un zero dans le resultat d'une requete
    Par oceane751 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 08/11/2005, 00h31
  5. Mette a jour 2 colonnes dans un UPDATE??
    Par Devil666 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 19/07/2005, 15h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo