Les dates
Accueil Remonter Liste de codes erreurs Les dates Pas à pas - A propos.wfm Pas à pas Le formulaire dUflp Newsgroups

 

Les Dates

(en cours d'écriture)

en_construc.gif (13899 octets)

Sur cette page, sont abordés les instructions et sujets suivants :

Date()
Set Date to
Set mark to
CtoD()
Les accolades
Les calculs sur les dates
Le nom du jour de la semaine
Le nom du mois

 

La gestion des dates est un élément important du travail sur des bases de données.

Déjà les américains ne l'écrivent pas comme nous. Heureusement dBase les stocke sous un format AAAAMMJJ dans ses fichiers. Il les affiche suivant le format de notre région.

DATE()

Pour obtenir la date courante, celle connue par l'ordinateur, l'instruction est date()

? date()   // renvoie 21/02/2010   (21 février 2010)

SET DATE TO

Pour obtenir l'affichage selon une autre norme, l'instruction SET DATE TO permet de choisir le format. Voici ce qu'indique l'aide de dBase Plus (DD est l'équivalent de JJ et YY de AA)

Option    Format
AMERICAN  MM/DD/YY
ANSI      YY.MM.DD
BRITISH   DD/MM/YY
FRENCH    DD/MM/YY
GERMAN    DD.MM.YY
ITALIAN   DD-MM-YY
JAPAN     YY/MM/DD
USA       MM-DD-YY
MDY       MM/DD/YY
DMY       DD/MM/YY
YMD       YY/MM/DD

Faites des essais

set date to american // renvoie 02/22/2010
set date to ansi     // renvoie 2010.02.22
set date to japan    // renvoie 2010/02/22

et pour revenir à la normale (ajouter obligatoirement une option) :

set date to french   // renvoie 22/02/2010

 

Si la barre oblique ne vous plait pas pour l'affichage d'une date au format français, vous pouvez modifier le caractère séparateur entre les jours, mois et années.

Pour cela l'instruction SET MARK TO sera utilisée

SET MARK TO

De nouveau, le mieux est de faire des essais

set date to french // renvoie 22/02/2010
set mark to "-"
? date() // renvoie 22-02-2010
set mark to "ccc"
? date() // renvoie 22c02c2010

A défaut d'être utile, cet exemple montre que tout caractère est utilisable, et que seul le premier est pris en compte

set mark to "."
? date() // renvoie 22.02.2010

et pour revenir à la présentation habituelle

set mark to
? date() // renvoie 22/02/2010

A la différence de set date, il n'est pas nécessaire de préciser le séparateur

 

Convertir une date écrite sous forme de chaine de caractères en date reconnue comme telle par dBase.

CTOD()

Convertir une chaine de caractère en date : l'intérêt est de pouvoir travailler dessus avec les fonctions dates et les fonctions arithmétiques

La fonction CTOD(), soit Caractères TO Date, transforme une chaîne de caractère en date.

Elle la renvoie sous la forme correspondant à l'affiche en cours pour une date

La encore, des essais sont clairs

? ctod("12-02-2010")  // renvoie 12/02/2010

Mélangeons des séparateurs comme le tiret et le point

? ctod("12-02.2010") // renvoie 12/02/2010

En fait, tout caractère séparateur est remplacé par le séparateur utilisé pour l'affichage en cours

? ctod("12c02x2010") // renvoie 12/02/2010

Danger20x20.gif (990 octets) Attention, ctod() ne se contente pas de transformer la chaîne de caractères, il crée une date !

Ainsi si vous saisissez

? ctod("madate")

dBase renvoie "  /  /    " et ce sera considéré comme une date, mais vide

Idem si vous n'avez pas de séparateur dans la date

? ctod("25062010")   // renvoie  /  /

Encore plus fort, si vous saisissez une date impossible, comme par exemple le 31 avril, dBase va calculer ce qui devrait être le 31ème jour d'avril, soit le premier mai en fait.

regardez :

? ctod("31-04-2010")  // renvoie 01/05/2010

et ce n'est pas seulement car c'est le jour de la fête du travail ! Essayez

? ctod("45-04-2010")  // renvoie 15/05/2010

Donc attention, à partir du moment ou le paramètre transmis est une chaîne de caractères, ctod() renverra TOUJOURS une date, soit vide, soit calculée, mais jamais de message d'erreur. Pensez-y quand vous l'utilisez.

Les accolades  { }

Les accolades sont d'un usage presque identique à CTOD() selon l'aide de dBase. En fait si on a bien

? {04-05-2006}   // renvoie 04/05/2006

ou

? {35-04-2006}   // renvoie 05/05/2006

la demande avec des séparateurs différents, qui passe "comme une lettre à La Poste" avec ctod() donnera pour

? {04-05.2006}  // renvoie une erreur sous forme d'un message d'alerte


cette caractéristique peut être intéressante : l'expression utilisée doit bien se présenter sous forme de date.

 

Opérations de calculs possibles sur les dates

On peut ajouter des jours à une date.

Exemple :

Quelle date serons-nous dans 20 jours, l'instruction est toute simple :

? date()       // renvoie 22/02/2010
? Date() + 20  // renvoie 14/03/2010

mais fonctionne aussi avec un nombre beaucoup plus grand

? Date() + 2600  // renvoie 06/04/2017

 

La soustraction est aussi possible :

? Date() - 20  // renvoie 02/02/2010

 

Le nom du jour de la semaine

Maintenant, avoir des informations sur le jour de la semaine est possible. Cela se fait avec l'instruction CDOW()

? cdow({22/02/2010})      // renvoie Monday

Hé oui, la dernière version francisée à ce jour est Visual dBase 5.7 ! En versions 32 bits, aucun dBase n'est en français. Pour vous aider vous pouvez utilisez la fonction FR_JOUR incluse dans FR_DATES.PRG (le télécharger).

Après avoir chargé ce module

? fr_jour({22/02/2010})   // renvoie Lundi

ce qui est plus facile pour un francophone.

Le nom du mois

Pour obtenir le nom du mois, une fonction dBase existe aussi

? cmonth({22/02/2010})    // renvoie February

Comme précédemment, cela manque de clarté.

Toujours dans FR_DATES.PRG vous pouvez utiliser la fonction FR_MOIS

? fr_mois({22/02/2010})   // renvoie Février

ce qui est plus lisible n'est-ce pas ?

 

 

 

Réalisé avec dBase 2.6.0.1

Dernière modification : samedi 05 novembre 2011 02:24

© M. Abraham