root/traduc/trunk/postgresql/datetime.xml

Revision 1039, 20.5 kB (checked in by sas, 6 months ago)

close #174
close #34

  • Property svn:keywords set to Date Author Revision
Line 
1 <?xml version="1.0" encoding="ISO-8859-15"?>
2 <!-- Dernière modification
3      le       $Date$
4      par      $Author$
5      révision $Revision$ -->
6
7  <appendix id="datetime-appendix">
8   <title>Support de date/heure</title>
9
10   <para>
11    <productname>PostgreSQL</productname> utilise un analyseur heuristique interne
12    pour le support des dates/heures saisies. Les dates et heures, saisies
13    sous la forme de chaînes de caractères, sont découpées en champs distincts
14    après détermination du type d'information contenue dans chaque champ. Chaque champ est
15    interpreté&nbsp;; une valeur peut lui être affectée, il peut être ignoré ou
16    encore être rejeté. Le parseur contient des tables de recherche internes
17    pour tous les champs textuels y compris les mois, les jours de la semaine et
18    les fuseaux horaires.
19   </para>
20
21   <para>
22    Cette annexe décrit le contenu des tables de
23    correspondance et les méthodes utilisées par le parseur pour décoder
24    les dates et heures.
25   </para>
26
27   <sect1 id="datetime-input-rules">
28    <title>Interprétation des Date/Heure saisies</title>
29
30    <para>
31     Les entrées de type date/heure sont toutes décodées en utilisant le processus
32 suivant.
33    </para>
34
35    <procedure>
36     <step>
37      <para>
38       Diviser la chaîne saisie en lexèmes et catégoriser les lexèmes en
39       chaînes, heures, fuseaux horaires et nombres.
40      </para>
41
42      <substeps>
43       <step>
44        <para>
45         Si le lexème numérique contient un double-point (<literal>:</literal>),
46         c'est une chaîne de type heure. On inclut tous les chiffres et
47         double-points qui suivent.
48        </para>
49       </step>
50
51       <step>
52        <para>
53         Si le lexème numérique contient un tiret (<literal>-</literal>), une
54         barre oblique (<literal>/</literal>) ou au moins deux points
55         (<literal>.</literal>), c'est une chaîne de type date qui contient peut-être
56         un mois sous forme textuelle. Si un lexème de date a déjà été reconnu, il
57         est alors interprété comme un nom de fuseau horaire
58         (par exemple <literal>America/New_York</literal>).
59        </para>
60       </step>
61
62 <!-- e.g. : par exemple
63      i.e. : id est, c'est-à-dire -->
64       <step>
65        <para>
66         Si le lexème n'est que numérique alors il s'agit soit d'un champ simple
67         soit d'une date concaténée ISO 8601 (<literal>19990113</literal> pour
68         le 13 janvier 1999, par exemple) ou d'une heure concaténée ISO 8601
69         (<literal>141516</literal> pour 14:15:16, par exemple).
70        </para>
71       </step>
72
73       <step>
74        <para>
75         Si le lexème débute par le signe plus (<literal>+</literal>) ou le
76         signe  moins (<literal>-</literal>), alors il s'agit soit d'un fuseau horaire numérique,
77         soit d'un champ spécial.
78        </para>
79       </step>
80      </substeps>
81     </step>
82
83     <step>
84      <para>
85       Si le lexème est une chaîne texte, le comparer avec les différentes chaînes
86       possibles&nbsp;:
87      </para>
88      
89      <substeps>
90       <step>
91        <para>
92         Faire une recherche binaire dans la table pour vérifier si le lexème
93         est une abréviation de fuseau horaire.
94        </para>
95       </step>
96      
97       <step>
98        <para>
99         S'il n'est pas trouvé, une recherche binaire est effectuée dans la table
100         pour vérifier si le lexème est une chaîne spéciale
101         (<literal>today</literal>, par exemple),
102         un jour (<literal>Thursday</literal>, par exemple),
103         un mois (<literal>January</literal>, par exemple),
104         ou du bruit (<literal>at</literal>, <literal>on</literal>, par exemple).
105        </para>
106       </step>
107      
108 <!-- Le passage suivant ne figure pas dans la doc PG 8.2.3
109       <step>
110        <para>
111         Si pas trouvé, faire une recherche binaire similaire dans une table de
112         correspondance pour faire correspondre le marqueur avec un fuseau horaire.
113        </para>
114       </step>
115 -->
116       <step>
117        <para>
118         Si le lexème n'est toujours pas trouvé, une erreur est levée.
119        </para>
120       </step>
121      </substeps>
122     </step>
123    
124     <step>
125      <para>
126       Lorsque le lexème est un nombre ou un champ de nombre&nbsp;:
127      </para>
128
129      <substeps>
130       <step>
131        <para>
132         S'il y a huit ou six chiffres,
133         et qu'aucun autre champ date n'a été lu, alors il est interprété comme
134         une <quote>date concaténée</quote> (<literal>19990118</literal> ou
135         <literal>990118</literal>, par exemple).
136         L'interprétation est <literal>AAAAMMJJ</literal> ou <literal>AAMMJJ</literal>.
137        </para>
138       </step>
139
140       <step>
141        <para>
142         Si le lexème est composé de trois chiffres
143         et qu'une année est déjà lue, alors il est interprété comme un jour de l'année.
144        </para>
145       </step>
146      
147       <step>
148        <para>
149         Si quatre ou six chiffres et une année sont déjà lus, alors il est
150         interprété comme une heure (<literal>HHMM</literal> ou <literal>HHMMSS</literal>).
151        </para>
152       </step>
153
154       <step>
155        <para>
156         Si le lexème est composé de trois chiffres ou plus et qu'aucun champ
157         date n'a été trouvé, il est interprété
158         comme une année (cela impose l'ordre aa-mm-jj des champs dates restants).
159        </para>
160       </step>
161
162       <step>
163        <para>
164         Dans tous les autres cas, le champ date est supposé suivre l'ordre
165         imposé par le paramêtre
166         <varname>datestyle</varname> : mm-jj-aa, jj-mm-aa, ou aa-mm-jj.
167         Si un champ jour ou mois est en dehors des limites, une erreur est
168         levée.
169        </para>
170       </step>
171      </substeps>
172     </step>
173
174 <!-- negate : rendre négatif et non annuler -->
175     <step>
176      <para>
177       Si BC est indiqué, le signe de l'année est inversé et un est ajouté pour
178       le stockage interne.  (Il n'y a pas d'année zéro dans le calendrier Grégorien,
179       alors numériquement 1 BC devient l'année zéro.)
180      </para>
181     </step>
182
183     <step>
184      <para>
185       Si BC n'est pas indiqué et que le champ année est composé de deux chiffres, alors
186       l'année est ajustée à quatre chiffres. Si le champ vaut moins que 70,
187       alors on ajoute 2000, sinon 1900.
188
189       <tip>
190        <para>
191         Les années du calendrier Grégorien AD 1-99 peuvent être saisie avec 4
192         chiffres, deux zéros en tête (<literal>0099</literal> pour
193         AD 99, par exemple).
194        </para>
195       </tip>
196      </para>
197     </step>
198    </procedure>
199   </sect1>
200
201
202   <sect1 id="datetime-keywords">
203    <title>Mots clés Date/Heure</title>
204
205    <para>
206     <xref linkend="datetime-month-table"/> présente les lexèmes
207     reconnus commme des noms de mois.
208    </para>
209
210     <table id="datetime-month-table">
211      <title>Noms de mois</title>
212      <tgroup cols="2">
213       <thead>
214        <row>
215         <entry>Mois</entry>
216         <entry>Abréviations</entry>
217        </row>
218       </thead>
219       <tbody>
220         <row>
221           <entry>January (Janvier)</entry>
222           <entry>Jan</entry>
223         </row>
224         <row>
225           <entry>February (Février)</entry>
226           <entry>Feb</entry>
227         </row>
228         <row>
229           <entry>March (Mars)</entry>
230           <entry>Mar</entry>
231         </row>
232         <row>
233           <entry>April (Avril)</entry>
234           <entry>Apr</entry>
235         </row>
236         <row>
237           <entry>May (Mai)</entry>
238           <entry></entry>
239         </row>
240         <row>
241           <entry>June (Juin)</entry>
242           <entry>Jun</entry>
243         </row>
244         <row>
245           <entry>July (Juillet)</entry>
246           <entry>Jul</entry>
247         </row>
248         <row>
249           <entry>August (Août)</entry>
250           <entry>Aug</entry>
251         </row>
252         <row>
253           <entry>September (Septembre)</entry>
254           <entry>Sep, Sept</entry>
255         </row>
256         <row>
257           <entry>October (Octobre)</entry>
258           <entry>Oct</entry>
259         </row>
260         <row>
261           <entry>November (Novembre)</entry>
262           <entry>Nov</entry>
263         </row>
264         <row>
265           <entry>December (Décembre)</entry>
266           <entry>Dec</entry>
267         </row>
268       </tbody>
269      </tgroup>
270     </table>
271
272     <para>
273      <xref linkend="datetime-dow-table"/> présente les lexèmes
274      reconnus comme des noms de jours de la semaine.
275     </para>
276
277      <table id="datetime-dow-table">
278       <title>Noms des jours de la semaine</title>
279       <tgroup cols="2">
280        <thead>
281         <row>
282          <entry>Jour</entry>
283          <entry>Abréviation</entry>
284         </row>
285        </thead>
286        <tbody>
287         <row>
288          <entry>Sunday (Dimanche)</entry>
289          <entry>Sun</entry>
290         </row>
291         <row>
292          <entry>Monday (Lundi)</entry>
293          <entry>Mon</entry>
294         </row>
295         <row>
296          <entry>Tuesday (Mardi)</entry>
297          <entry>Tue, Tues</entry>
298         </row>
299         <row>
300          <entry>Wednesday (Mercredi)</entry>
301          <entry>Wed, Weds</entry>
302         </row>
303         <row>
304          <entry>Thursday (Jeudi)</entry>
305          <entry>Thu, Thur, Thurs</entry>
306         </row>
307         <row>
308          <entry>Friday (Vendredi)</entry>
309          <entry>Fri</entry>
310         </row>
311         <row>
312          <entry>Saturday (Samedi)</entry>
313          <entry>Sat</entry>
314         </row>
315        </tbody>
316       </tgroup>
317      </table>
318
319    <para>
320     <xref linkend="datetime-mod-table"/> présente les lexèmes utilisés par
321     divers modificateurs.
322    </para>
323
324     <table id="datetime-mod-table">
325      <title>Modificateurs de Champs Date/Heure</title>
326      <tgroup cols="2">
327       <thead>
328        <row>
329         <entry>Identifiant</entry>
330         <entry>Description</entry>
331        </row>
332       </thead>
333       <tbody>
334        <row>
335         <entry><literal>ABSTIME</literal></entry>
336         <entry>Ignoré</entry>
337        </row>
338        <row>
339         <entry><literal>AM</literal></entry>
340         <entry>L'heure précède 12:00</entry>
341        </row>
342        <row>
343         <entry><literal>AT</literal></entry>
344         <entry>Ignoré</entry>
345        </row>
346        <row>
347         <entry><literal>JULIAN</literal>, <literal>JD</literal>, <literal>J</literal></entry>
348         <entry>Le champ suivant est un jour du calendrier Julien</entry>
349        </row>
350        <row>
351         <entry><literal>ON</literal></entry>
352         <entry>Ignoré</entry>
353        </row>
354        <row>
355         <entry><literal>PM</literal></entry>
356         <entry>L'heure suit 12:00</entry>
357        </row>
358        <row>
359         <entry><literal>T</literal></entry>
360         <entry>Le champ suivant est une heure</entry>
361        </row>
362       </tbody>
363      </tgroup>
364     </table>
365
366    <para>
367     Le mot clé <literal>ABSTIME</literal> est ignoré pour des raisons
368     historiques&nbsp;: dans les très vieilles versions de
369     <productname>PostgreSQL</productname>, les valeurs invalides de type
370     <type>abstime</type> étaient émises en tant que <literal>Invalid Abstime</literal>.
371     Ce n'est plus le cas aujourd'hui. Il est donc fort probable que ce mot clé
372     soit abandonné dans une version future.
373    </para>
374
375   </sect1>
376
377   <sect1 id="datetime-config-files">
378   <title>Fichiers de configuration date/heure</title>
379
380    <indexterm>
381     <primary>fuseau horaire</primary>
382     <secondary>saisie d'abréviations</secondary>
383    </indexterm>
384
385    <para>
386     Comme il n'existe pas de réel standard des abréviations de fuseaux
387     horaire, <productname>PostgreSQL</productname> permet de personnaliser
388     l'ensemble des abréviations acceptées par le serveur. Le paramètre
389     d'exécution <xref linkend="guc-timezone-abbreviations"/> détermine
390     l'ensemble des abréviations actives. Bien que tout utilisateur de la base
391     puisse modifier ce paramètre, les valeurs possibles sont
392     sous le contrôle de l'administrateur de bases de données &mdash; ce sont en fait
393     les noms des fichiers de configuration stockés dans
394     <filename>.../share/timezonesets/</filename> du répertoire d'installation.
395     En ajoutant ou en modifiant les fichiers de ce répertoire, l'administrateur
396     peut définir les règles d'abréviation des fuseaux horaires.
397    </para>
398
399    <para>
400     <literal>timezone_abbreviations</literal> peut prendre tout nom
401     de fichier situé dans <filename>.../share/timezonesets/</filename>, sous
402     réserve que ce nom soit purement alphabétique. (L'interdiction de
403     caractères non alphabétique dans <literal>timezone_abbreviations</literal>
404     empêche la lecture de fichiers en dehors du répertoire prévu et
405     celle de fichiers de sauvegarde ou autre.)
406    </para>
407
408    <para>
409     Un fichier d'abréviation de zones horaires peut contenir des lignes blanches
410     et des commentaires (commençant avec un <literal>#</literal>). Les
411     autres lignes doivent suivre l'un des formats suivants&nbsp;:
412
413 <synopsis>
414 <replaceable>nom_fuseau_horaire</replaceable> <replaceable>décalage</replaceable>
415 <replaceable>nom_fuseau_horaire</replaceable> <replaceable>décalage</replaceable> D
416 @INCLUDE <replaceable>nom_fichier</replaceable>
417 @OVERRIDE
418 </synopsis>
419    </para>
420
421    <para>
422     Un <replaceable>nom_fuseau_horaire</replaceable> n'est que
423     l'abréviation définie. Le <replaceable>décalage</replaceable> est le
424     décalage en secondes à partir d'UTC, une valeur positive signifiant à
425     l'est de Greenwich, une valeur négative à l'ouest.
426     Ainsi, -18000 représente cinq heures à l'ouest
427     de Greenwich, soit l'heure standard de la côte ouest nord américaine.
428     <literal>D</literal> indique que le nom du fuseau représente une heure
429     soumise à des règles de changement d'heure plutôt que l'heure standard. Comme tous les
430     décalages de fuseau horaire ont des limites de 15 minutes, le nombre
431     de secondes doit être un multiple de 900.
432    </para>
433
434    <para>
435     La syntaxe <literal>@INCLUDE</literal> autorise l'inclusion d'autres fichiers
436     du répertoire <filename>.../share/timezonesets/</filename>. Les inclusions
437     peuvent être imbriquées jusqu'à une certaine profondeur.
438    </para>
439
440    <para>
441     La syntaxe <literal>@OVERRIDE</literal> indique que les entrées suivantes
442     du fichier peuvent surcharger les entrées précédentes (c'est-à-dire des
443     entrées obtenues à partir de fichiers inclus). Sans cela, les définitions en
444     conflit au sein d'une même abréviation lèvent une erreur.
445    </para>
446
447    <para>
448     Dans une installation non modifiée, le fichier <filename>Default</filename>
449     contient toutes les abréviations de fuseaux horaire, sans conflit, pour la
450     quasi-totalité du monde. Les fichiers supplémentaires <filename>Australia</filename>
451     et <filename>India</filename> sont fournis pour ces régions&nbsp;: ces
452     fichiers incluent le fichier <literal>Default</literal> puis
453     ajoutent ou modifient les fuseaux horaires si nécessaire.
454    </para>
455
456    <para>
457     Pour des raisons de référence, une installation standard contient aussi
458     des fichiers <filename>Africa.txt</filename>, <filename>America.txt</filename>,
459     etc. qui contiennent des informations sur les abréviations connues et
460     utilisées en accord avec la base de données de fuseaux horaires
461     <literal>zic</literal>. Les définitions des noms de zone trouvées dans ces
462     fichiers peuvent être copiées et collées dans un fichier de configuration
463     personnalisé si nécessaire. Il ne peut pas être fait directement référence
464     à ces fichiers dans le paramètre
465     <literal>timezone_abbreviations</literal> à cause du point dans leur nom.
466    </para>
467
468    <note>
469     <para>
470      Si une erreur survient lors de la lecture des jeux de données de
471      fuseaux horaires, aucune nouvelle valeur n'est acceptée mais les anciennes
472      sont conservées. Si l'erreur survient au démarrage de la base, celui-ci échoue.
473     </para>
474    </note>
475
476    <caution>
477     <para>
478      Les abréviations de fuseau horaire définies dans le fichier de configuration
479      surchargent les informations sans fuseau définies nativement dans
480      <productname>PostgreSQL</productname>.
481      Par exemple, le fichier de configuration <filename>Australia</filename>
482      définit <literal>SAT</literal> (<foreignphrase>South Australian Standard
483      Time</foreignphrase>, soit l'heure standard pour l'Australie du sud). Si
484      ce fichier est actif, <literal>SAT</literal> n'est plus reconnu comme
485      abréviation de samedi (<foreignphrase>Saturday</foreignphrase>).
486     </para>
487    </caution>
488
489    <caution>
490     <para>
491      Si les fichiers de <filename>.../share/timezonesets/</filename> sont
492      modifiés, il revient à l'utilisateur de procéder à leur sauvegarde &mdash;
493      une sauvegarde normale de base n'inclut pas ce répertoire.
494     </para>
495    </caution>
496
497   </sect1>
498
499   <sect1 id="datetime-units-history">
500   <title>Histoire des unités</title>
501
502   <para>
503    Le calendrier Julien a été introduit par Julius Caesar en -45. Il était
504    couramment utilisé dans le monde occidental jusqu'en l'an 1582, date à
505    laquelle des pays ont commencé à se convertir au
506    calendrier Grégorien.  Dans le calendrier Julien, l'année tropicale est
507    arrondie à 365 jours 1/4, soit 365,25 jours. Cela conduit à une erreur
508    de l'ordre d'un jour tous les 128 ans.
509   </para>
510
511   <para>   
512    L'erreur grandissante du calendrier poussa le Pape
513    Gregoire XIII a réformé le calendrier en accord avec les
514    instructions du Concile de Trent.
515    Dans le calendrier Grégorien, l'année tropicale est arrondie à
516    365 + 97/400 jours, soit 365,2425 jours. Il faut donc à peu prés 3300
517    ans pour que l'année tropicale subissent un décalage d'un an dans le
518    calendrier Grégorien.
519   </para>
520
521   <para>
522    L'arrondi 365+97/400 est obtenu à l'aide de 97 années bissextiles
523    tous les 400 ans. Les règles suivantes sont utilisées&nbsp;:
524
525    <simplelist>
526     <member>
527      toute année divisible par 4 est bissextile&nbsp;;
528     </member>
529     <member>
530      cepandant, toute année divisible par 100 n'est pas bissextile&nbsp;;
531     </member>
532     <member>
533      cependant, toute années divisible par 400 est bissextile.
534     </member>
535    </simplelist>
536
537    1700, 1800, 1900, 2100 et 2200 ne sont donc pas des années bissextiles.
538    1600, 2000 et 2400 si.
539
540    Par opposition, dans l'ancien calendrier Julien, toutes les années
541    divisibles par 4 sont bissextiles.
542   </para>
543
544   <para>
545    En février 1582, le pape décrèta que 10 jours devaient étre
546    supprimés du mois d'octobre 1582, le 15 octobre devant ainsi arriver après
547    le 4 octobre.
548    Cela a été appliqué en Italie, Pologne, Portugal et Espagne. Les autres pays
549    catholiques ont suivi peu après, mais les pays protestants ont été plus
550    rétifs et les contrées orthodoxes grèques n'ont pas effctué le changement
551    avant le début du 20ème siècle.
552
553    La réforme a été appliquée par la Grande Bretagne et ses colonies (y compris
554    les actuels Etats-Unis) en 1752.
555    Donc le 2 septembre 1752 a été suivi du 14 septembre 1752.
556
557    C'est pour cela que la commande <command>cal</command> produit
558    la sortie suivante&nbsp;:
559
560 <screen>$ <userinput>cal 9 1752</userinput>
561    septembre 1752
562 di lu ma me je ve sa
563        1  2 14 15 16
564 17 18 19 20 21 22 23
565 24 25 26 27 28 29 30</screen>
566   </para>
567
568    <para>
569      Le standard SQL stipule que <quote>dans la définition d'un
570      <quote>libellé date/heure</quote> (<foreignphrase>datetime
571      literal</foreignphrase>), les <quote>valeurs date/heure</quote>
572      sont contraintes par les règles naturelles des dates et heures
573      imposées par le calendrier Grégorien</quote>. Les dates comprises entre
574      le 5 octobre 1582 et le 14 octobre 1582, bien qu'éliminées dans plusieurs
575      pays par ordre du Pape, sont conformes aux <quote>règles
576      naturelles</quote> et sont donc des dates valables.
577      <productname>PostgreSQL</productname> suit le standard SQL en comptant
578      les dates exclusivement dans le calendrier grégorien, même pour les
579      années où ce calendrier n'existait pas encore.
580     </para>
581
582   <para>
583    Divers calendriers ont été developés dans différentes parties du monde,
584    la plupart précède le système Grégorien.
585
586    Par exemple,
587    les débuts du calendrier chinois peuvent être évalués aux alentours du 14ème
588    siécle avant J.-C. La légende veut que l'empereur Huangdi inventa le
589    calendrier en 2637 avant J-C.
590    
591    La République de Chine utilise le calendrier Grégorien pour les besoins
592    civils. Le calendrier chinois est utilisé pour déterminer les festivals.
593   </para>
594
595   <para>
596    La <quote>date Julien</quote> n'a pas de relation avec le <quote>calendrier
597    Julien</quote>. Le système de date Julien a été inventé par le précepteur
598    français Joseph Justus Scaliger (1540-1609) et tient probablement son nom
599    du père de Scaliger, le précepteur italien Julius Caesar Scaliger
600    (1484-1558). Dans le système de date Julien, chaque jour est un nombre
601    séquentiel, commençant à partir de JD 0, appelé quelque fois
602    <emphasis>la</emphasis> date Julien. JD 0 correspond au 1er janvier
603    4713 avant JC dans le calendrier Julien, ou au 24 novembre 4714 avant JC
604    dans le calendrier grégorien. Le comptage de la date Julien est le plus
605    souvent utilisé par les astronomes pour donner un nom à leurs observations,
606    et du coup une date part de midi UTC jusqu'au prochain midi UTC, plutôt que
607    de minuit à minuit&nbsp;: JD 0 désigne les 24 heures de midi UTC le 1er
608    janvier 4713 avant JC jusqu'au midi UTC du 2 janvier 4713 avant JC.
609   </para>
610
611   <para>
612    Bien que <productname>PostgreSQL</productname> accepte la saisie et
613    l'affichage des dates en notation de date Julien (et les utilise aussi pour
614    quelques calculs internes de date et heure), il n'utilise pas le coup
615    des dates de midi à midi. <productname>PostgreSQL</productname> traite une
616    date Julien comme allant de minuit à minuit.
617   </para>
618  </sect1>
619 </appendix>
Note: See TracBrowser for help on using the browser.