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

Langage Delphi Discussion :

Gestion d'une variable TDateTime


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 14
    Points : 6
    Points
    6
    Par défaut Gestion d'une variable TDateTime
    Bonjour, je vous écris car je cherche de l'aide pour la gestion d'une variable TDateTime. Dans mon programme je fais des comparaisons de variables en TDateTime. Il se trouve que de temps en temps j'ai besoin de vérifier si la variable en TDateTime est vide ou pas? Je n'arrive pas à réinitialiser la variable à 0. Pour faire simple je cherche l'équivalent du nil dans le cas d'un pointeur ou de '' pour un string qui permettent la mise à zero de la variable. Exemple de programmation : si nom est déclaré comme string alors on a nom:='', si parbre est un pointeur alors on a parbre:=nil, maintenant si heure est déclaré comme TDateTime alors on a heure:=????? . Merci d'avance pour vos réponses.

  2. #2
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Le seul moyen est de lui assigner la valeur 0.
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Le Zéro est une valeur admise comme peu probable dans un logiciel de gestion (dans une application médicale, on a presque plus de personne qui soit né le 30/12/1899 mais cela peut arriver)

    Sinon, tu peux utiliser le type variant, il gère le vide et le null, c'est d'ailleurs le type utilisé pour stocker en interne les données d'une base de données des composants DB de Delphi ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    c'est d'ailleurs le type utilisé pour stocker en interne les données d'une base de données des composants DB de Delphi ...
    Pas vraiment. Les composants DB (Dérivés de TDataSet) stockent les données en interne dans des buffer, ligne à ligne (lus par la méthode GetRecord). Le format des données à l'intérieur du buffer dépend du type du dataset dérivé, mais en principe il colle au mieux au type de donnée déclaré pour le TField.
    Ensuite les TField sont des accesseurs qui lisent/écrivent les données d'un champ dans ce buffer, en faisant les convertions de types nécessaires.

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Effectivement, merci de corriger cet abus, disons plutôt que c'est le type utilisé pour échanger des données sans se préoccuper du type, très utile pour copier un enregistrement dans un autre par un parcours sur Fields et utilisation de la propriété Value ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Futur Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Je vous remercie pour vos réponses, c'est en effet ce que j'avais utiliser, c'est à dire 0.0. Mais par rapport à la fréquence d'utilisation dans le cas d'une date, il est sur que c'est peu utiliser, mais dans le cas d'une heure 0.0 correspond à 00:00:00, heure qui peut être utiliser. Je tacherais de bloquer cette heure, ce n'est pas grave. Le programme ne permettra pas la saisie de 00:00:00 juste des valeurs comprise entre 00:00:01 et 23:59:59.
    Et désolé ShaiLeTroll mais je n'ai pas bien compris ton explication, tu parles de type que je n'ai jamais utilisé et que je ne connais pas.

    Merci encore pour vos réponses.

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Tape "Types variants" dans l'aide, tu devrais trouver cela intéressant ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Futur Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Bon, désolé de vous demander une nouvelle aide mais même après mes recherches je n'arrive pas à trouver.
    Dans ce cas la il s'agit de la gestion des Date dans uniquement "d'entiers". Il se trouve que j'ai besoin de récupérer la valeur d'une date pour l'utiliser comme indice dans un tableau. Je m'explique lorsque l'on tape une date on obtient par exemple 39448 pour le 01/01/08. Je souhaiterais récupérer cette valeur (39448) pour pouvoir m'en servir dans un tableau comme indice du tableau.
    De même il existe une fonction DateToStr mais il n'existe pas de fonction DateToInt.

    Je vous simplifie un peu le problème n'aller pas croire que je vais créer un tableau de 39000 case. Je sais que ça ne serait pas très intelligent. Il se trouve que je dois créer un calendrier d'évènement et que j'ai choisi de faire un calendrier de 3600 jours allant de 01/01/08 au 01/01/18. Cela correspond à un tableau de 3600 jours indexé de 1 à 3600 (équivalent en TdateTime : de 39448 à 43048).
    J'ai donc besoin de convertir par exemple le 03/01/08 : 39450 (TDateTime) en integer. Après on fait 39450-39447 (constante imposé par moi meme) = 3
    On obtient ainsi l'indice du jour où il faut ajouter un évènement.

    Bon tous le problème c'est de convertir ou de récupérer la valeur de la date en TDateTime pour en faire un indice en Integer pour mon tableau.

    Merci d'avance pour vos réponses.

  9. #9
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Un Trunc devrait aller

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MonEntier := Trunc(MaDate);
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  10. #10
    Futur Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Merci, ça à l'air de fonctionner. Je crois aussi avoir trouver une nouvelle fonction après avoir mener mes recherches un peu plus en avant

    DaysBetween(Date2 : Tdatetime,Date1 : Tdatetime) : Integer;

    Qu'en pensez vous, ça m'evitera même d'avoir à faire la soustraction. Elle est faite automatiquement par la fonction.

    Je vous remercie encore pour vos aides.

  11. #11
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut
    Citation Envoyé par sergedarkmaul Voir le message
    Qu'en pensez vous, ça m'evitera même d'avoir à faire la soustraction. Elle est faite automatiquement par la fonction.
    Attention à l'utilisation de DaysBetween, cette fonction renvoie le nombre de jours entiers séparant les 2 dates.

    Donc entre le 28/04/2008 17:00 et le 29/04/2008 16:00 la fonction renverra 0.

    @+ Claudius

Discussions similaires

  1. Gestion d'une variable absente dans un fichier netCDF
    Par habasque dans le forum MATLAB
    Réponses: 6
    Dernier message: 12/02/2013, 16h33
  2. Réponses: 0
    Dernier message: 08/02/2013, 11h54
  3. Gestion d'une suite de variables
    Par Gaetan_ dans le forum Langage
    Réponses: 24
    Dernier message: 04/08/2011, 12h08
  4. Désigner une variable avec une variable?
    Par littleman dans le forum Paradox
    Réponses: 4
    Dernier message: 12/08/2002, 11h21
  5. Réponses: 4
    Dernier message: 05/06/2002, 14h35

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