Convertion date en nombre

Discutez d'informatique ici !
fenwe
Messages: 5
Enregistré le: 21 Mai 2010, 12:41

convertion date en nombre

par fenwe » 21 Mai 2010, 12:47

Je recherche a convertir n'importe quelle date (position/negative) en nombre.
Seul le jours/mois/anne m'interesse ( pas l'heure)
Le but etant de stocke se nombre dans une base de donnee et que chaque nombre corresponde a une et une seule date jours sans qu'il y ai de confusion.
Merci



Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 21 Mai 2010, 16:18

salut,

un truc tres simple :
tu concatenes
yyyymmjj
et pis si t'as une date negative, ben tu laisses le signe :
exemple : -12 janvier 1664
tu mets -16640112
et apres tu retrouves ta date easy!

Par contre, tu n'as pas la possibilité d'ajouter des dates et de retomber sur tes pates mais tu ne veux que l'unicité de stockage et ca correspond à ce que tu recherches (ou du moins ce que tu as exprimé)
la vie est une fête :)

Avatar de l’utilisateur
Olympus
Membre Irrationnel
Messages: 1668
Enregistré le: 12 Mai 2009, 12:00

par Olympus » 22 Mai 2010, 15:13

cf. le timestamp .

Sve@r
Membre Transcendant
Messages: 5441
Enregistré le: 13 Avr 2008, 12:00

par Sve@r » 24 Mai 2010, 12:28

fenwe a écrit:Le but etant de stocke se nombre dans une base de donnee et que chaque nombre corresponde a une et une seule date jours sans qu'il y ai de confusion.

Généralement les bdd classiques possèdent un type "date" et des outils associés
Un exemple pour PostgreSQL
Code: Tout sélectionner
create table toto(
    date_du_jour date not null default current_date
);
alter table toto add constraint pkey primary key (date_du_jour);

insert into toto values ('2008-05-24');
insert into toto values ('yesterday');
insert into toto values ('tomorrow');
insert into toto values ('today');

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

par fatal_error » 24 Mai 2010, 12:54

J'ai perso une aversion particulière pour laisser la bdd gérer le format des dates. Pe que jm'en sers mal mais pour ma part, c'est soit un timestamp, soit mon propre encodage.

Concernant le timestamp, ca se fait, mais l'intéret d'une date encodée comme dit plus haut est qu'elle laisse bénificier l'inconnu cad :
un evenement a eu lien en l'an 2000, on ecrit
20000000, le jour 00 et le mois 00 représentant des infos qu'on ne connait pas et on peut faire un traitement particulier.
Avec un timestamp, par exemple, ben on aura une date, mais qui sera pas forcément la date exacte.

Après ca dépend ce cqu'on veut faire bien sûr.
la vie est une fête :)

fenwe
Messages: 5
Enregistré le: 21 Mai 2010, 12:41

par fenwe » 25 Mai 2010, 15:38

Merci pour vos réponses.
Je retiens celle de Fatal error pour les arguments qu'il a presenter.
Comme je veut stockes des dates 'historique' le TimeStamp (temps unix) est trop limiter pour moi (je crois qu'il commence dans les année 1970) et il ne gere pas les negaifs. Le format text me permet en effet de gere des dates imprecise type (yyyymm00 ou yyyy0000) et meme yyyyBBjj ou B est un code specifique.
Fatal error: non je n'ai pas besoin d'ajout de dates seulement de pouvoir les filter entre debut/fin.

Merci de vos aides.

Avatar de l’utilisateur
Olympus
Membre Irrationnel
Messages: 1668
Enregistré le: 12 Mai 2009, 12:00

par Olympus » 29 Mai 2010, 19:50

Logiquement, le timestamp peut être négatif puisqu'il est signed sur 32 bits ( d'où la courte date limite à laquelle faudra passer au 64 bits ), donc peut prendre en compte des dates entre 1901 et 2038 .

Ils ne sont peut-être pas supportés sous Windows, mais ils marchent sur des serveurs sous Linux ou BSD ( en fait, cela dépend de la définition de time_t dans l'OS, et sous les Unix elle est signed ) .

Avatar de l’utilisateur
Olympus
Membre Irrationnel
Messages: 1668
Enregistré le: 12 Mai 2009, 12:00

par Olympus » 30 Mai 2010, 14:34

Petite citation de Wikipédia :

The standard Unix time_t (data type representing a point in time) is a signed integer data type, traditionally of 32 bits (but see below), directly encoding the Unix time number as described in the preceding section. Being 32 bits means that it covers a range of about 136 years in total. The minimum representable time is 1901-12-13, and the maximum representable time is 2038-01-19. At 03:14:07 UTC 2038-01-19 this representation overflows.


Source : http://en.wikipedia.org/wiki/Unix_time .

Et pis, si tu veux des dates antérieures à 1901, ben tu n'as qu'à upgrader vers une plate-forme 64 bits ^^

Enfin, la solution de fatal_error marchera bien évidemment, mais aura le désavantage d'être lente . Pis, entre réinventer la roue et utiliser un truc standard, le choix est vite fait ... Sauf si tu as vraiment besoin de dates "imprécises" .

fenwe
Messages: 5
Enregistré le: 21 Mai 2010, 12:41

par fenwe » 31 Mai 2010, 14:29

Merci pour vos infos.
J'ignorais que la date était signé. Je trouve ca blizzard. on date de 0 à x (avec une date initiale) aurait ete plus 'naturel' pour moi.

Je suis sous debian 32bit. J'ai pas envisagé de migrer pour l'instant(je sais pas si ovh donne cette possibilité).

Sauf si tu as vraiment besoin de dates "imprécises"
oui, ainsi que de dates très anciennes (application historiques).
Merci a vous

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite