Zend_Date-Overview.xml 55 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 17172 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.date.overview">
  5. <title>Zend_Date API Übersicht</title>
  6. <para>
  7. Obwohl die API von <classname>Zend_Date</classname> simpel und eindeutig ist, ist dessen
  8. Design flexibel und mächtig durch die Vielzahl an Möglcihkeiten von Operationen und
  9. Operanden.
  10. </para>
  11. <sect2 id="zend.date.options">
  12. <title>Zend_Date Optionen</title>
  13. <sect3 id="zend.date.options.formattype">
  14. <title>Auswahl der Art des Datumsformats</title>
  15. <para>
  16. Viele Methoden benutzen Zeichenketten für Datumsformate so ähnlich wie PHP's
  17. <methodname>date()</methodname>. Wenn man mit den Zeichen von PHP's Datumsformaten
  18. mehr Erfahrung hat als mit den ISO Zeichen für Formate dann kann man
  19. <methodname>Zend_Date::setOptions(array('format_type' => 'php'))</methodname>
  20. benutzen. Danach können PHP's Zeichen für Datumsformate für alle Funktionen
  21. verwendet werden die einen <varname>$format</varname> Parameter akzeptieren. Durch
  22. Benutzen von
  23. <methodname>Zend_Date::setOptions(array('format_type' => 'iso'))</methodname> kann
  24. man wieder auf den Standardmodus zurückwechseln der nur ISO Zeichen für
  25. Datumsformate unterstützt. Für eine Liste von unterstützten Zeichen Codes kann hier
  26. nachgelesen werden: <xref linkend="zend.date.constants.phpformats" />
  27. </para>
  28. </sect3>
  29. <sect3 id="zend.date.options.fixdst">
  30. <title>Sommer-/Winterzeit und Datumsberechnungen</title>
  31. <para>
  32. Wenn Daten manipuliert werden überschrieten Sie manchmal die Sommer-/Winterzeit
  33. Grenze was normalerweise dazu führt das das Datum eine Stunde verliert oder
  34. hinzubekommt. Wenn zum Beispiel ein Monat zu einem Datum vor einer
  35. Sommer-/Winterzeitänderung hinzugefügt wird und das Ergebnismonat nach dieser
  36. Änderung liegt, sieht es so aus als ob das Datum eine Stunde verliert oder
  37. hinzubekommt durch den Wert des geänderten Datums. Für Grenzstunden, wie Mitternacht
  38. für den ersten oder letzten Tag eines Monats, führt das Hinzufügen von genügend
  39. Monaten, wenn die Sommer-/Winterzeitgrenze überschritten wird, dazu das das Datum
  40. eine Stunde verliert und damit zum letzten Tag des Vormonats wird durch das
  41. Erscheinungsbild des "eins fehlt" Fehlers. Um diese Situationen zu vermeiden, kann
  42. die Sommer-/Winterzeit durch Verwendung der <code>fix_dst</code> Option ignoriert
  43. werden. Wenn eine Sommer-/Winterzeitgrenze überschritten wird, wird ja normalerweise
  44. eine Stunde hinzugefügt oder entfernt abhändig vom Datum. Zum Beispiel führt eine
  45. Datumsberechnung einer Frühlingsgrenze z ueinem Datum welche einen Tag weniger hat
  46. als erwartet, wenn die Zeit des Originaldatums 00:00:00 war. Da
  47. <classname>Zend_Date</classname> auf Zeitpunkten basiert und nicht auf Kalenderdaten
  48. mit Zeitkomponenten, verliert der Zeitpunkt eine Stunde was zu einem Datum führt das
  49. einen Kalendertag weniger hat als erwartet. Um solche Problem zu verhindern kann die
  50. Option <code>fix_dst</code> verwendet werden, welche standardmäßig
  51. <constant>TRUE</constant> ist. Das führt dazu das die Sommer-/Winterzeit keinen
  52. Einfluß mehr bei Datumsberechnungen zeigt (<methodname>addMonth()</methodname>,
  53. <methodname>subMonth()</methodname>).
  54. <methodname>Zend_Date::setOptions(array('fix_dst' => false))</methodname> kann
  55. benutzt werden um Hinzufügen oder Entfernen der Sommer-/Winterzeitanpassung zu
  56. gestatten wenn Datumsberechnungen durchgeführt werden.
  57. </para>
  58. <para>
  59. <emphasis>Wenn die aktuelle Zeitzone innerhalb der Instanz von
  60. <classname>Zend_Date</classname> auf UTC oder GMT gestellt wird, wird die Option
  61. <code>'fix_dst'</code> nicht verwendet</emphasis> weil diese zwei Zeitzonen nicht
  62. mit DST arbeiten. Wenn die Zeitzone für diese Instanz wieder auf eine Zeitzone
  63. gestellt wird die nicht UTC oder GMT ist, wird die vorher definierte 'fix_dst'
  64. Option wieder für die Datumsberechnungen verwendet.
  65. </para>
  66. </sect3>
  67. <sect3 id="zend.date.options.extendmonth">
  68. <title>Monatsberechnungen</title>
  69. <para>
  70. Wenn Monate von einem existierenden Datum hinzugefügt oder entfernt werden, kann der
  71. Ergebniswert des Monatstages unerwartet sein, wenn das Originaldatum auf einen Tag
  72. gefallen ist der Nahe am Ende des Monats ist. Wenn zum Beispiel ein Monat zum 31sten
  73. Jänner hinzugefügt wird, werden Personen welche mit SQL vertraut sind den 28sten
  74. Februar als Ergebnis erwarten. Auf der anderen Seite werden Personen welche mit
  75. Excel und OpenOffice vertraut sind werden den 3tten März als Ergebnis erwarten. Das
  76. Problem besteht nur wen das Ergebnismonat den Tag der im Originaldatum gesetzt war,
  77. nicht hat. Für Zend Framework Entwickler können das gewünschte Verhalten
  78. ausgewählen indem die Option <code>extend_month</code> genutzt wird um entweder das
  79. SQL Verhalten, wenn die Option <constant>FALSE</constant> ist, oder das
  80. Tabellenverhalten, wenn die Option <constant>TRUE</constant> ist, auszuwählen. Das
  81. Standardverhalten für <code>extend_month</code> ist <constant>FALSE</constant>, um
  82. SQL kompatibles Verhalten zu erlauben. <classname>Zend_Date</classname> führt
  83. Monatsberechnungen standardmäßig in der Art durch das Daten auf das Monatsende hin
  84. abgeschnitten werden (wenn notwendig), ohne das in den nächsten Monat umgebrochen
  85. wird wenn das Originaldatum einen Monatstag bestimmt der die Anzahl der Tag des
  86. Ergebnismonats überschreitet.
  87. <classname>Zend_Date::setOptions(array('extend_month' => true));</classname> kann
  88. benutzt werden um Monatsberechnungen wie in populären Tabellenkalkulationen
  89. durchzuführen.
  90. </para>
  91. </sect3>
  92. <sect3 id="zend.date.options.cache">
  93. <title>
  94. Lokalisierung und Normalisierung von Daten mit Zend_Cache schneller machen
  95. </title>
  96. <para>
  97. Man kann <classname>Zend_Date</classname> schneller machen indem ein
  98. <classname>Zend_Cache</classname> Adapter verwendet wird. Das verschnellert alle
  99. Methoden von <classname>Zend_Date</classname> wenn lokalisierte Daten verwendet
  100. werden. Zum Beispiel werden alle Methoden welche
  101. <classname>Zend_Date::DATE</classname> und <classname>Zend_Date::TIME</classname>
  102. Konstanten akzeptieren hiervon profitieren. Um einen
  103. <classname>Zend_Cache</classname> Adapter für <classname>Zend_Date</classname> zu
  104. setzen muß nur
  105. <classname>Zend_Date::setOptions(array('cache' => $adapter));</classname> aufgerufen
  106. werden.
  107. </para>
  108. </sect3>
  109. <sect3 id="zend.date.options.timesync">
  110. <title>Syncronisierte Zeiten mit Zend_TimeSync erhalten</title>
  111. <para>
  112. Normalerweise unterscheiden sich die Uhren von Servern und Computern voneinander.
  113. <classname>Zend_Date</classname> ist dazu fähig solche Probleme mit Hilfe von
  114. <classname>Zend_TimeSync</classname> zu handhaben. Mit
  115. <classname>Zend_Date::setOptions(array('timesync' => $timeserver));</classname> kann
  116. ein Zeitserver gesetzt werden welcher den Unterschied zwischen dem eigenen aktuellen
  117. Zeitpunkt und dem wirklichen aktuellen Zeitpunkt für alle Instanzen von
  118. <classname>Zend_Date</classname> setzt. Die Verwendung dieser Option ändern nicht
  119. den Zeitpunkt von bestehenden Instanzen. Am besten ist es also dies innerhalb der
  120. Bootstrap Datei zu setzen.
  121. </para>
  122. </sect3>
  123. </sect2>
  124. <sect2 id="zend.date.values">
  125. <title>Arbeiten mit Datumswerten</title>
  126. <para>
  127. Sobald die Eingabe durch die Erstellung eines <classname>Zend_Date</classname> Objektes
  128. normalisiert wurde, hat es eine zugeordnete Zeitzone aber eine Interne Darstellung durch
  129. Verwendung von <ulink
  130. url="http://en.wikipedia.org/wiki/Unix_Time">UNIX Zeitpunkten</ulink>. Damit ein
  131. Datum in einer lokalisierten Art und Weise durchsucht werden kann, muß zuerst eine
  132. Zeitzone bekannt sein. Die Standardzeitzone ist immer GMT/UTC. Um die Zeitzone des
  133. Objektes zu inspizieren kann <methodname>getTimeZone()</methodname> verwendet werden.
  134. Um die Zeitzone des Objektes zu wechseln kann <methodname>setTimeZone()</methodname>
  135. verwendet werden. Alle Änderungen des Objektes sind immer relativ zu seiner Zeitzone zu
  136. sehen.
  137. </para>
  138. <para>
  139. Aufpassen das nicht Teile von Datumsobjekten die unterschiedliche Zeitzonen haben,
  140. gemischt oder verglichen werden, da dies Grundsätzlich unerwartete Resultate zeigen kann
  141. da die Manipulationen nur dem Zeitpunkt zugeordnet werden. Das Arbeiten an
  142. <classname>Zend_Date</classname> Objekten die unterschiedliche Zeitzonen haben
  143. funktioniert grundsätzlich abgesehen davon wie vorher erwähnt, da Daten bei der
  144. Instantiierung von <classname>Zend_Date</classname> zu UNIX Zeitpunkten normalisiert
  145. werden.
  146. </para>
  147. <para>
  148. Die meisten Methoden erwarten eine Konstante für die Auswahl des gewünschten Teils
  149. <varname>$part</varname> des Datums, wie z.B. <classname>Zend_Date::HOUR</classname>.
  150. Diese Konstanten sind für alle unten angeführten Funktionen gültig. Eine Liste aller
  151. vorhandenen Konstanten wird hier beschrieben: <xref
  152. linkend="zend.date.constants.list" />. Wenn <varname>$part</varname> nicht
  153. spezifiziert wird, wird <classname>Zend_Date::TIMESTAMP</classname> angenommen.
  154. Alternativ kann ein benutzerdefiniertes Format für <varname>$part</varname> verwendet
  155. werden, mit Hilfe der gleichen Mechanismen und Formatdefinitionen wie bei <link
  156. linkend="zend.locale.date.normalize"><methodname>Zend_Locale_Format::getDate()</methodname></link>.
  157. Wenn ein Datumsobjekt erstellt wird durch Verwendung eines offensichtlich falschen
  158. Datums (z.B. die Nummer des Monats größer als 12), wird <classname>Zend_Date</classname>
  159. eine Ausnahme werfen, solange kein spezielles Datumsformat ausgewählt wurde, und z.B.
  160. <varname>$part</varname> entweder <constant>NULL</constant> oder
  161. <classname>Zend_Date::DATES</classname> (ein "fehlertolerantes" Format).
  162. </para>
  163. <example id="zend.date.values.example-1">
  164. <title>Benutzerdefinierte Eingabeformate für Daten</title>
  165. <programlisting language="php"><![CDATA[
  166. $date1 = new Zend_Date('Feb 31, 2007', null, 'en_US');
  167. echo $date1, "\n"; // Ausgabe "Mar 3, 2007 12:00:00 AM"
  168. $date2 = new Zend_Date('Feb 31, 2007', Zend_Date::DATES, 'en_US');
  169. echo $date2, "\n"; // Ausgabe "Mar 3, 2007 12:00:00 AM"
  170. // Stikte Interpretation des angegebenen Formats
  171. $date3 = new Zend_Date('Feb 31, 2007', 'MM.dd.yyyy');
  172. echo $date3, "\n"; // Ausgabe "Mar 3, 2007 12:00:00 AM"
  173. ]]></programlisting>
  174. </example>
  175. <para>
  176. Wenn der optionale <varname>$locale</varname> Parameter angegeben wurde, dann
  177. verdeutlicht <varname>$locale</varname> den <varname>$date</varname> Operand durch
  178. Ersetzen der Monatsnamen und Wochentagsnamen für die <varname>$date</varname>
  179. Zeichenkette, und auch Datumszeichenketten können analysiert werden durch die
  180. Vorschriften dieses Gebietsschemas (siehe <code><link
  181. linkend="zend.locale.date.normalize">Zend_Locale_Format::getDate()</link></code>).
  182. Die automatische Normalisierung von lokalisierten <varname>$date</varname> Angaben einer
  183. Zeichenkette werden nur dann durchgeführt wenn eine der
  184. <classname>Zend_Date::DATE*</classname> oder <classname>Zend_Date::TIME*</classname>
  185. Konstanten verwendet wird. Das Gebietsschema identifiziert die Sprache welche verwendet
  186. werden soll um Monatsnamen und Wochentagsnamen zu analysieren wenn
  187. <varname>$date</varname> eine Zeichenkette ist die ein Datum enthält. Wenn der
  188. Eingabeparameter <varname>$date</varname> nicht angegeben wurde, dann definiert der
  189. <varname>$locale</varname> Parameter das Gebietsschema für lokalisierte Ausgaben (z.B.
  190. das Datumsformat für eine Ausgabe als Zeichenkette). Anzumerken ist auch das der
  191. <varname>$date</varname> Parameter stattdessen ein Typname sein kann (z.B.
  192. <varname>$hour</varname> für <methodname>addHour()</methodname>), und das verhindert
  193. auch nicht das ein <classname>Zend_Date</classname> Objekt als Argument für diesen
  194. Parameter angegeben werden kann. Wenn keine <varname>$locale</varname> angegeben wurde,
  195. wird das Gebietsschema des aktuellen Objektes genommen um <varname>$date</varname> zu
  196. interpretieren oder das lokalisierte Format für die Ausgabe auszuwählen.
  197. </para>
  198. <para>
  199. Seit Zend Framework 1.7.0 unterstützt <classname>Zend_Date</classname> auch die
  200. Verwendung eines Anwendungsweiten Gebietsschemas. Man kann ganz einfach eine
  201. <classname>Zend_Locale</classname> Instanz in der Registry setzen wie anbei gezeigt. Mit
  202. dieser Schreibweise kann man das manuelle Setzen eines Gebietsschemas für jede Instanz
  203. vergessen wenn man das selbe Gebietsschema mehrere Male verwenden will.
  204. </para>
  205. <programlisting language="php"><![CDATA[
  206. // In der Bootstrap Datei
  207. $locale = new Zend_Locale('de_AT');
  208. Zend_Registry::set('Zend_Locale', $locale);
  209. // Irgendwo in der eigenen Anwendung
  210. $date = new Zend_Date('31.Feb.2007');
  211. ]]></programlisting>
  212. </sect2>
  213. <sect2 id="id.date.basic">
  214. <title>Grundsätzliche Zend_Date Operationen für die meisten Teile von Daten</title>
  215. <para>
  216. Die Methoden <methodname>add()</methodname>, <methodname>sub()</methodname>,
  217. <methodname>compare()</methodname>, <methodname>get()</methodname>, und
  218. <methodname>set()</methodname> arbeiten generell mit Daten. In Jedem Fall wird die
  219. Operation auf dem Datum durchgeführt das in den Objektinstanz vorhanden ist. Der
  220. <varname>$date</varname> Operand wird für alle dieser Methoden benötigt, ausser für
  221. <methodname>get()</methodname> und kann eine <classname>Zend_Date</classname>
  222. Objektinstanz, eine nummerische Zeichenkette oder ein Integer sein. Diese Methoden
  223. nehmen an das <varname>$date</varname> ein Zeitpunkt ist, wenn es kein Objekt ist.
  224. Trotzdem kontrolliert der <varname>$part</varname> Operand an welchem logischen Teil
  225. der zwei Daten gearbeitet werden soll, was Arbeiten an Teilen von Daten des Objekts
  226. erlaubt, wie Jahr oder Minute selbst wenn <varname>$date</varname> eine lange Form
  227. einer Datumszeichenkette enthält wie "Dezember 31, 2007 23:59:59". Das Ergebnis der
  228. Operation ändert das Datum im Objekt ausser bei <methodname>compare()</methodname> und
  229. <methodname>get()</methodname>.
  230. </para>
  231. <example id="zend.date.basic.example-1">
  232. <title>Arbeiten an Teilen von Daten</title>
  233. <programlisting language="php"><![CDATA[
  234. $date = new Zend_Date(); // $date's Zeitpunkt === time()
  235. // Ändert $date durch addieren von 12 Stunden
  236. $date->add('12', Zend_Date::HOUR);
  237. print $date;
  238. ]]></programlisting>
  239. </example>
  240. <para>
  241. Übliche Methoden existieren für jede Kombination von Basisarbeiten und viele normale
  242. Datumsabschnitte wie in der Tabelle anbei gezeigt. Diese üblichen Methoden erlauben uns
  243. faulen Programmierern zu vermeiden das die <link
  244. linkend="zend.date.constants.list">Konstanten für Datumsabschnitte</link>
  245. ausgeschrieben werden müssen. Normalerweise sind wir benannt durch Kombination eines
  246. Prefixes (Name der Basisoperation) und einem Suffix (Art des Datumsabschnittes), wie
  247. <methodname>addYear()</methodname>. In der Liste die anbei steht, existieren alle
  248. Kombinationen von "Datumsabschnitten" und "Basisoperationen". Zum Beispiel die
  249. Operation "add" existiert für jeden dieser Datumsabschnitte wie
  250. <methodname>addDay()</methodname>, <methodname>addYear()</methodname> und viele mehr.
  251. </para>
  252. <para>
  253. Diese üblichen Methoden haben die selbe gleichartige Funktionalität wie die Methoden für
  254. die Basisoperationen, aber Sie erwarten Zeichenkette und Integer
  255. <varname>$date</varname> Operanden welche nur die Werte enthalten welche durch den Typ
  256. definiert sind der durch den Suffix der Methode definiert wurde. Deshalb identifizieren
  257. diese Methoden (z.B. "Year" oder "Minute") die Einheit des <varname>$date</varname>
  258. Operanden wenn <varname>$date</varname> eine Zeichenkette oder ein Integer ist
  259. </para>
  260. <sect3 id="id.date.basic.parts">
  261. <title>Liste der Datumsabschnitte</title>
  262. <table id="id.date.basic.parts.table">
  263. <title>Datumsabschnitte</title>
  264. <tgroup cols="2">
  265. <thead>
  266. <row>
  267. <entry>Datumsabschnitt</entry>
  268. <entry>Erklärung</entry>
  269. </row>
  270. </thead>
  271. <tbody>
  272. <row>
  273. <entry>
  274. <ulink url="http://en.wikipedia.org/wiki/Unix_Time">Zeitpunkt</ulink>
  275. </entry>
  276. <entry>
  277. UNIX Zeitpunkt, ausgedrückt in Sekunden die vergangen sind seit dem
  278. 1. Jänner, 1970 00:00:00 GMT/UTC.
  279. </entry>
  280. </row>
  281. <row>
  282. <entry>
  283. <ulink url="http://en.wikipedia.org/wiki/Gregorian_calendar">Jahr</ulink>
  284. </entry>
  285. <entry>Gregorianisches Kalenderjahr (z.B. 2006)</entry>
  286. </row>
  287. <row>
  288. <entry>
  289. <ulink url="http://en.wikipedia.org/wiki/Month#Julian_and_Gregorian_calendars">Monat</ulink>
  290. </entry>
  291. <entry>
  292. Gregorianisches Kalendermonat (1-12, Lokalisierte Namen werden
  293. unterstützt)
  294. </entry>
  295. </row>
  296. <row>
  297. <entry>
  298. <ulink url="http://en.wikipedia.org/wiki/24-hour_clock">24 Stunden
  299. Uhr</ulink>
  300. </entry>
  301. <entry>
  302. Stunde des Tages (0-23) bezeichnet die vergangenen Stunden seit dem
  303. Beginn des Tages
  304. </entry>
  305. </row>
  306. <row>
  307. <entry>
  308. <ulink url="http://en.wikipedia.org/wiki/Minute">Minute</ulink>
  309. </entry>
  310. <entry>
  311. Minuten der Stunde (0-59) bezeichnet die vergangenen Minuten seit
  312. dem Beginn der Stunde
  313. </entry>
  314. </row>
  315. <row>
  316. <entry>
  317. <ulink url="http://en.wikipedia.org/wiki/Second">Sekunde</ulink>
  318. </entry>
  319. <entry>
  320. Sekunde der Minute (0-59) bezeichnet die vergangenen Sekunden seit
  321. dem Beginn der Minute
  322. </entry>
  323. </row>
  324. <row>
  325. <entry>
  326. <ulink url="http://en.wikipedia.org/wiki/Millisecond">Millisekunde</ulink>
  327. </entry>
  328. <entry>
  329. Millisekunden bezeichnen Tausendstel einer Sekunde (0-999).
  330. <classname>Zend_Date</classname> unterstützt zwei zusätzliche
  331. Methoden für das Arbeiten mit Zeiteinheiten die kleiner als Sekunden
  332. sind. Normalerweise verwenden <classname>Zend_Date</classname>
  333. Instanzen eine Genauigkeit welche der von Millisekunden entspricht
  334. wie man durch <methodname>getFractionalPrecision()</methodname> sehen
  335. kann. Um die Genauigkeit zu Ändern kann
  336. <methodname>setFractionalPrecision($precision)</methodname> verwendet
  337. werden. Trotzdem ist die Genauigkeit praktisch auf Millisekunden
  338. begrezt da <classname>Zend_Date</classname> <code><ulink
  339. url="http://php.net/microtime">microtime()</ulink></code> dafür
  340. benutzt.
  341. </entry>
  342. </row>
  343. <row>
  344. <entry>
  345. <ulink url="http://en.wikipedia.org/wiki/Day">Tag</ulink>
  346. </entry>
  347. <entry>
  348. <constant>Zend_Date::DAY_SHORT</constant> wird von
  349. <varname>$date</varname> extrahiert wenn der
  350. <varname>$date</varname> Operand eine
  351. <classname>Zend_Date</classname> Instanz oder eine nummerische
  352. Zeichenkette ist. Sonst wird versucht den Tag laut den
  353. dokumentierten Konventionen für diese Konstanten zu extrahieren:
  354. <classname>Zend_Date::WEEKDAY_NARROW</classname>,
  355. <classname>Zend_Date::WEEKDAY_NAME</classname>,
  356. <classname>Zend_Date::WEEKDAY_SHORT</classname>,
  357. <classname>Zend_Date::WEEKDAY</classname> (Gregorianischer Kalender
  358. angenommen)
  359. </entry>
  360. </row>
  361. <row>
  362. <entry>
  363. <ulink url="http://en.wikipedia.org/wiki/Week">Woche</ulink>
  364. </entry>
  365. <entry>
  366. <classname>Zend_Date::WEEK</classname> wird von
  367. <varname>$date</varname> extrahiert wenn der
  368. <varname>$date</varname> Operand eine Instanz von
  369. <classname>Zend_Date</classname> oder eine nummerische Zeichenkette
  370. ist. Sonst wird eine Ausnahme geworfen. (Gregorianischer Kalender
  371. angenommen)
  372. </entry>
  373. </row>
  374. <row>
  375. <entry>Datum</entry>
  376. <entry>
  377. <classname>Zend_Date::DAY_MEDIUM</classname> wird aus
  378. <varname>$date</varname> extrahiert wenn der
  379. <varname>$date</varname> Operand eine Instanz von
  380. <classname>Zend_Date</classname> ist. Sonst wird versucht das Datum
  381. in ein Zend_Date::DATE_MEDIUM formatiertes Datum zu normalisieren.
  382. Das Format von <classname>Zend_Date::DATE_MEDIUM</classname> hängt
  383. vom Gebietsschema des Objektes ab.
  384. </entry>
  385. </row>
  386. <row>
  387. <entry>Wochentage</entry>
  388. <entry>
  389. Wochentage werden nummerisch dargestellt von 0 (für Sonntag) bis 6
  390. (für Samstag). <classname>Zend_Date::WEEKDAY_DIGIT</classname> wird
  391. aus <varname>$date</varname> extrahiert wenn der
  392. <varname>$date</varname> Operand eine Instanz von
  393. <classname>Zend_Date</classname> oder eine numerische Zeichenkette
  394. ist. Sonst wird versucht den Tag laut den dokumentierten
  395. Konventionen für diese Konstanten zu extrahieren:
  396. <classname>Zend_Date::WEEKDAY_NARROW</classname>,
  397. <classname>Zend_Date::WEEKDAY_NAME</classname>,
  398. <classname>Zend_Date::WEEKDAY_SHORT</classname>,
  399. <classname>Zend_Date::WEEKDAY</classname> (Gregorianischer Kalender
  400. angenommen)
  401. </entry>
  402. </row>
  403. <row>
  404. <entry>Tag des Jahres</entry>
  405. <entry>
  406. In <classname>Zend_Date</classname> wird der Tag des Jahres als
  407. Anzahl der Kalendertage dargestellt die seit dem Start des Jahres
  408. vergangen sind (0-365). Wie bei den anderen oben dargestellten
  409. Einheiten werden Bruchteile auf die nächste ganze Nummer abgerundet.
  410. (Gregorianischer Kalender angenommen)
  411. </entry>
  412. </row>
  413. <row>
  414. <entry>
  415. <ulink url="http://www.faqs.org/rfcs/rfc822.html">Arpa</ulink>
  416. </entry>
  417. <entry>
  418. Arpa Daten (bzw RFC 822 formatierte Daten) werden unterstützt. Die
  419. Ausgabe verwendet entweder "GMT" oder "Laut Gebietsschema
  420. unterschiedliche Stunden + Minuten" Format (siehe Sektion 5 von RFC
  421. 822). Vor PHP 5.2.2, zeigte die Verwendung der DATE_RFC822 Konstante
  422. mit PHP date Funktionen hier und da <ulink
  423. url="http://bugs.php.net/bug.php?id=40308">fehlerhafte
  424. Ergebnisse</ulink>. Die Ergebnisse von Zend_Date sind korrekt.
  425. Beispiel: <code>Mon, 31 Dec 06 23:59:59 GMT</code>
  426. </entry>
  427. </row>
  428. <row>
  429. <entry>
  430. <ulink url="http://en.wikipedia.org/wiki/ISO_8601">Iso</ulink>
  431. </entry>
  432. <entry>
  433. Für die Ausgabe werden nur vollständige ISO 8601 Daten unterstützt.
  434. Beispiel: <code>2009-02-14T00:31:30+01:00</code>
  435. </entry>
  436. </row>
  437. </tbody>
  438. </tgroup>
  439. </table>
  440. </sect3>
  441. <sect3 id="id.date.basic.operations">
  442. <title>Liste der Datums-Operationen</title>
  443. <para>
  444. Die unten angeführten Basisoperationen können statt den bequemlichen Operationen für
  445. spezielle Datumsabschnitte verwendet werden. Die <link
  446. linkend="zend.date.constants.list">entsprechenden Konstanten</link> werden für
  447. den <varname>$part</varname> Parameter verwendet.
  448. </para>
  449. <table id="id.date.basic.operations.table">
  450. <title>Basis Operationen</title>
  451. <tgroup cols="2">
  452. <thead>
  453. <row>
  454. <entry>Basis Operationen</entry>
  455. <entry>Erklärung</entry>
  456. </row>
  457. </thead>
  458. <tbody>
  459. <row>
  460. <entry>get()</entry>
  461. <entry>
  462. <para>
  463. <emphasis>get($part = null, $locale = null)</emphasis>
  464. </para>
  465. <para>
  466. <methodname>get($part)</methodname> kann benutzt werden um einen
  467. Datumsabschnitt <varname>$part</varname> dieses Datumsobjektes
  468. welcher in ein Gebietsschema lokalisiert oder als formatierte
  469. Zeichenkette oder Integer gewünscht ist zurück zu bekommen.
  470. Durch Verwendung der BCMath Erweiterung können nummerische
  471. Zeichenkettten statt Integer für große Werte zurückgegeben
  472. werden. <emphasis>NOTE:</emphasis> Anders als
  473. <methodname>get()</methodname> geben die anderen get*()
  474. bequemlichen Methoden nur Instanzen von
  475. <classname>Zend_Date</classname> zurück welche nur das Datum
  476. oder die Zeit repräsentieren das ausgewählt oder berechnet
  477. wurde.
  478. </para>
  479. </entry>
  480. </row>
  481. <row>
  482. <entry>set()</entry>
  483. <entry>
  484. <para>
  485. <emphasis>set($date, $part = null, $locale = null)</emphasis>
  486. </para>
  487. <para>
  488. Setzt den Abschnitt <varname>$part</varname> des aktuellen
  489. Objektes übereinstimmend mit dem Wert der für diesen Abschnitt
  490. in der Eingabe <varname>$date</varname> und im Gebietsschema
  491. <varname>$locale</varname> gefunden wurde.
  492. </para>
  493. </entry>
  494. </row>
  495. <row>
  496. <entry>add()</entry>
  497. <entry>
  498. <para>
  499. <emphasis>add($date, $part = null, $locale = null)</emphasis>
  500. </para>
  501. <para>
  502. Addiert den Abschnitt <varname>$part</varname> von
  503. <varname>$date</varname> welcher im Gebietsschema
  504. <varname>$locale</varname> geschrieben ist zum Datum des
  505. aktuellen Objektes.
  506. </para>
  507. </entry>
  508. </row>
  509. <row>
  510. <entry>sub()</entry>
  511. <entry>
  512. <para>
  513. <emphasis>sub($date, $part = null, $locale = null)</emphasis>
  514. </para>
  515. <para>
  516. Subtrahiert den Abschnitt <varname>$part</varname> von
  517. <varname>$date</varname> welcher im Gebietsschema
  518. <varname>$locale</varname> geschrieben ist vom Datum des
  519. aktuellen Objektes.
  520. </para>
  521. </entry>
  522. </row>
  523. <row>
  524. <entry>copyPart()</entry>
  525. <entry>
  526. <para>
  527. <emphasis>copyPart($part, $locale = null)</emphasis>
  528. </para>
  529. <para>
  530. Gibt ein geklontes Objekt zurück, wobei nur der gewünschte
  531. Abschnitt <varname>$part</varname> des Datumsobjektes kopiert
  532. wird, wobei im Klon das Gebietsschema von
  533. <varname>$locale</varname> gesetzt wird (wenn angegeben).
  534. </para>
  535. </entry>
  536. </row>
  537. <row>
  538. <entry>compare()</entry>
  539. <entry>
  540. <para>
  541. <emphasis>compare($date, $part = null, $locale =
  542. null)</emphasis>
  543. </para>
  544. <para>
  545. Vergleicht den Abschnitt <varname>$part</varname> des Datums
  546. <varname>$date</varname> mit dem Zeitpunkt des Objektes. Gibt 0
  547. zurück wenn sie gleich sind, 1 wenn wenn der Abschnitt dieses
  548. Objektes früher war als der Abschnitt von $date und andernfalls
  549. -1.
  550. </para>
  551. </entry>
  552. </row>
  553. </tbody>
  554. </tgroup>
  555. </table>
  556. </sect3>
  557. </sect2>
  558. <sect2 id="zend.date.others.comparison">
  559. <title>Vergleichen von Daten</title>
  560. <para>
  561. Die folgenden Basisoperationen haben keine vergleichbaren vereinfachten Methoden für
  562. Datumsabschnitt wie beschrieben unter <xref linkend="zend.date.overview" />.
  563. </para>
  564. <table id="zend.date.others.comparison.table">
  565. <title>Methoden zum Vergleichen von Daten</title>
  566. <tgroup cols="2">
  567. <thead>
  568. <row>
  569. <entry>Methoden</entry>
  570. <entry>Beschreibung</entry>
  571. </row>
  572. </thead>
  573. <tbody>
  574. <row>
  575. <entry>equals()</entry>
  576. <entry>
  577. <para>
  578. <emphasis>equals($date, $part = null, $locale = null)</emphasis>
  579. </para>
  580. <para>
  581. Gibt <constant>TRUE</constant> zurück wenn der Abschnitt
  582. <varname>$part</varname> von <varname>$date</varname> der das
  583. Gebietsschema <varname>$locale</varname> hat, der gleiche ist wie
  584. der Abschnitt <varname>$part</varname> vom Datum des Objektes,
  585. andernfalls <constant>FALSE</constant>
  586. </para>
  587. </entry>
  588. </row>
  589. <row>
  590. <entry>isEarlier()</entry>
  591. <entry>
  592. <para>
  593. <emphasis>isEarlier($date, $part = null, $locale = null)</emphasis>
  594. </para>
  595. <para>
  596. Gibt <constant>TRUE</constant> zurück wenn der Abschnitt
  597. <varname>$part</varname> vom Datum des Objektes früher ist als der
  598. Abschnitt <varname>$part</varname> von <varname>$date</varname> der
  599. das Gebietsschema <varname>$locale</varname> hat
  600. </para>
  601. </entry>
  602. </row>
  603. <row>
  604. <entry>isLater()</entry>
  605. <entry>
  606. <para>
  607. <emphasis>isLater($date, $part = null, $locale = null)</emphasis>
  608. </para>
  609. <para>
  610. Gibt <constant>TRUE</constant> zurück wenn der Abschnitt
  611. <varname>$part</varname> vom Datum des Objektes später ist als der
  612. Abschnitt <varname>$part</varname> von <varname>$date</varname> der
  613. das Gebietsschema <varname>$locale</varname> hat
  614. </para>
  615. </entry>
  616. </row>
  617. <row>
  618. <entry>isToday()</entry>
  619. <entry>
  620. <para>
  621. <emphasis>isToday()</emphasis>
  622. </para>
  623. <para>
  624. Testet ob Jahr, Monat und Tag des heutigen Datums mit dem Datumswert
  625. des Objektes übereinstimmen, wenn die Zeitzone des Objektes
  626. verwendet wird.
  627. </para>
  628. </entry>
  629. </row>
  630. <row>
  631. <entry>isTomorrow()</entry>
  632. <entry>
  633. <para>
  634. <emphasis>isTomorrow()</emphasis>
  635. </para>
  636. <para>
  637. Testet ob Jahr, Monat und Tag des morgigen Datums mit dem Datumswert
  638. des Objektes übereinstimmen, wenn die Zeitzone des Objektes
  639. verwendet wird.
  640. </para>
  641. </entry>
  642. </row>
  643. <row>
  644. <entry>isYesterday()</entry>
  645. <entry>
  646. <para>
  647. <emphasis>isYesterday()</emphasis>
  648. </para>
  649. <para>
  650. Testet ob Jahr, Monat und Tag des gestrigen Datums mit dem
  651. Datumswert des Objektes übereinstimmen, wenn die Zeitzone des
  652. Objektes verwendet wird.
  653. </para>
  654. </entry>
  655. </row>
  656. <row>
  657. <entry>isLeapYear()</entry>
  658. <entry>
  659. <para>
  660. <emphasis>isLeapYear()</emphasis>
  661. </para>
  662. <para>
  663. <methodname>isLeapYear()</methodname> kann benutzt werden ob zu
  664. prüfen ob das aktuelle Objekt ein Schaltjahr ist. Sonst kann
  665. <methodname>Zend_Date::checkLeapYear($year)</methodname> benutzt
  666. werden um das Jahr <varname>$year</varname> zu prüfen, welches eine
  667. Zeichenkette, ein Integer oder eine Instanz von
  668. <classname>Zend_Date</classname> sein kann. Ist das Jahr ein
  669. Schaltjahr ?
  670. </para>
  671. </entry>
  672. </row>
  673. <row>
  674. <entry>isDate()</entry>
  675. <entry>
  676. <para>
  677. <emphasis>isDate($date, $format = null, $locale = null)</emphasis>
  678. </para>
  679. <para>
  680. Diese Methode prüft ob ein angegebenes Datum ein echtes Datum ist,
  681. und gibt <constant>TRUE</constant> zurück wenn alle Prüfungen in
  682. Ordnung waren. Sie arbeitet wie PHP's checkdate() Funktion, kann
  683. aber auch lokalisierte Monatsnamen prüfen sowie Daten die den
  684. Bereich von checkdate() übersteigen
  685. </para>
  686. </entry>
  687. </row>
  688. </tbody>
  689. </tgroup>
  690. </table>
  691. </sect2>
  692. <sect2 id="zend.date.others.gettingparts">
  693. <title>Daten und Teile von Daten erhalten</title>
  694. <para>
  695. Verschiedene Methoden unterstützen das erhalten von Werten die auf eine
  696. <classname>Zend_Date</classname> Instanz bezug nehmen.
  697. </para>
  698. <table id="zend.date.others.gettingparts.table">
  699. <title>Ausgabemethoden von Daten</title>
  700. <tgroup cols="2">
  701. <thead>
  702. <row>
  703. <entry>Methode</entry>
  704. <entry>Erklärung</entry>
  705. </row>
  706. </thead>
  707. <tbody>
  708. <row>
  709. <entry>toString()</entry>
  710. <entry>
  711. <para>
  712. <emphasis>toString($format = null, $locale = null)</emphasis>
  713. </para>
  714. <para>
  715. Direkt aufzurufen oder über die magische Methode
  716. <methodname>__toString()</methodname>. Die
  717. <methodname>toString()</methodname> Methode formatiert automatisch
  718. den Wert des Datumsobjektes anhand der Konventionen des
  719. Gebietsschemas des Objektes, oder einem optional definierten
  720. Gebietsschema <varname>$locale</varname>. Für eine Liste von
  721. unterstützten Formatcodes kann hier nachgeschaut werden:
  722. <xref linkend="zend.date.constants.selfdefinedformats" />.
  723. </para>
  724. </entry>
  725. </row>
  726. <row>
  727. <entry>toArray()</entry>
  728. <entry>
  729. <para>
  730. <emphasis>toArray()</emphasis>
  731. </para>
  732. <para>
  733. Gibt eine Array Representation des ausgewählten Datums anhand der
  734. Konventionen des Gebietsschemas zurück. Das zurückgegebene Array ist
  735. identisch zu PHP's <ulink
  736. url="http://php.net/getdate">getdate()</ulink> Funktion und
  737. beinhaltet:
  738. </para>
  739. <para>
  740. <itemizedlist>
  741. <listitem>
  742. <para>
  743. Tag als Zahl mit '<emphasis>day</emphasis>'
  744. (<classname>Zend_Date::DAY_SHORT</classname>)
  745. </para>
  746. </listitem>
  747. <listitem>
  748. <para>
  749. Monat als Zahl mit '<emphasis>month</emphasis>'
  750. (<classname>Zend_Date::MONTH_SHORT</classname>)
  751. </para>
  752. </listitem>
  753. <listitem>
  754. <para>
  755. Jahr als '<emphasis>year</emphasis>'
  756. (<classname>Zend_Date::YEAR</classname>)
  757. </para>
  758. </listitem>
  759. <listitem>
  760. <para>
  761. Stunde als '<emphasis>hour</emphasis>'
  762. (<classname>Zend_Date::HOUR_SHORT</classname>)
  763. </para>
  764. </listitem>
  765. <listitem>
  766. <para>
  767. Minute als '<emphasis>minute</emphasis>'
  768. (<classname>Zend_Date::MINUTE_SHORT</classname>)
  769. </para>
  770. </listitem>
  771. <listitem>
  772. <para>
  773. Sekunde als '<emphasis>second</emphasis>'
  774. (<classname>Zend_Date::SECOND_SHORT</classname>)
  775. </para>
  776. </listitem>
  777. <listitem>
  778. <para>
  779. Abgekürzte Zeitzone als '<emphasis>timezone</emphasis>'
  780. (<classname>Zend_Date::TIMEZONE</classname>)
  781. </para>
  782. </listitem>
  783. <listitem>
  784. <para>
  785. Unix Zeitpunkt als '<emphasis>timestamp</emphasis>'
  786. (<classname>Zend_Date::TIMESTAMP</classname>)
  787. </para>
  788. </listitem>
  789. <listitem>
  790. <para>
  791. Wochentag als Zahl mit '<emphasis>weekday</emphasis>'
  792. (<classname>Zend_Date::WEEKDAY_DIGIT</classname>)
  793. </para>
  794. </listitem>
  795. <listitem>
  796. <para>
  797. Tag des Jahres als '<emphasis>dayofyear</emphasis>'
  798. (<classname>Zend_Date::DAY_OF_YEAR</classname>)
  799. </para>
  800. </listitem>
  801. <listitem>
  802. <para>
  803. Woche als '<emphasis>week</emphasis>'
  804. (<classname>Zend_Date::WEEK</classname>)
  805. </para>
  806. </listitem>
  807. <listitem>
  808. <para>
  809. Abstand der Zeitzone zu GMT als
  810. '<emphasis>gmtsecs</emphasis>'
  811. (<classname>Zend_Date::GMT_SECS</classname>)
  812. </para>
  813. </listitem>
  814. </itemizedlist>
  815. </para>
  816. </entry>
  817. </row>
  818. <row>
  819. <entry>toValue()</entry>
  820. <entry>
  821. <para>
  822. <emphasis>toValue($part = null)</emphasis>
  823. </para>
  824. <para>
  825. Gibt eine Integer Repräsentation des ausgewählten Datumsabschnittes
  826. <varname>$part</varname> zurück anhand der Konventionen des
  827. Gebietsschemas des Objektes. Gibt <constant>FALSE</constant> zurück
  828. wenn der Abschnitt <varname>$part</varname> ein nicht numerischer
  829. Wert ist, wie <classname>Zend_Date::MONTH_NAME_SHORT</classname>.
  830. <emphasis>NOTIZ:</emphasis> Diese Methode ruft <link
  831. linkend="id.date.basic.operations"><methodname>get()</methodname></link>
  832. auf und castet das Ergebnis einen PHP Integer Wert, welcher
  833. unerwartete Ergebnisse liefern wird, wenn
  834. <methodname>get()</methodname> eine numerische Zeichenkette
  835. zurückgibt die eine Zahl enthält welche zu groß für einen PHP
  836. Integer Wert auf Ihrem System ist. Stattdessen sollte
  837. <methodname>get()</methodname> benutzt werden.
  838. </para>
  839. </entry>
  840. </row>
  841. <row>
  842. <entry>
  843. <link linkend="id.date.basic.operations">get()</link>
  844. </entry>
  845. <entry>
  846. <para>
  847. <emphasis>get($part = null, $locale = null)</emphasis>
  848. </para>
  849. <para>
  850. Diese Methode gibt den Abschnitt <varname>$part</varname> vom Datum des
  851. Objektes, welches mit dem Gebietsschema <varname>$locale</varname>
  852. lokalisiert wurde, als formatierten String oder Integer zurück. Für
  853. weitere Informationen hier weiterlesen:
  854. <xref linkend="id.date.basic.operations" />.
  855. </para>
  856. </entry>
  857. </row>
  858. <row>
  859. <entry>now()</entry>
  860. <entry>
  861. <para>
  862. <emphasis>now($locale = null)</emphasis>
  863. </para>
  864. <para>
  865. Diese bequemliche Funktion ist identisch mit
  866. <command>new Zend_Date()</command>. Sie gibt das aktuelle Datum als
  867. <classname>Zend_Date</classname> Objekt zurück, welches das
  868. Gebietsschema <varname>$locale</varname> hat.
  869. </para>
  870. </entry>
  871. </row>
  872. </tbody>
  873. </tgroup>
  874. </table>
  875. </sect2>
  876. <sect2 id="zend.date.others.fractions">
  877. <title>Arbeiten mit Sekundenbruchteilen</title>
  878. <para>
  879. Viele Methoden unterstützen es, Werte relativ zu einer <classname>Zend_Date</classname>
  880. Instanz zu erhalten.
  881. </para>
  882. <table id="zend.date.others.fractions.table">
  883. <title>Methoden zur Datumsausgabe</title>
  884. <tgroup cols="2">
  885. <thead>
  886. <row>
  887. <entry>Methode</entry>
  888. <entry>Erklärung</entry>
  889. </row>
  890. </thead>
  891. <tbody>
  892. <row>
  893. <entry>
  894. <para>
  895. <emphasis>getFractionalPrecision()</emphasis>
  896. </para>
  897. </entry>
  898. <entry>Gibt die Genauigkeit des Sekundenbruchteils zurück</entry>
  899. </row>
  900. <row>
  901. <entry>
  902. <para>
  903. <emphasis>setFractionalPrecision()</emphasis>
  904. </para>
  905. </entry>
  906. <entry>Setzt die Genauigkeit des Sekundenbruchteils</entry>
  907. </row>
  908. </tbody>
  909. </tgroup>
  910. </table>
  911. </sect2>
  912. <sect2 id="zend.date.other.sun">
  913. <title>Sonnenaufgang / Sonnenuntergang</title>
  914. <para>
  915. Drei Methoden geben Zugriff auf geographisch lokalisierte Informationen über die Sonne
  916. was die Zeit für Sonnenaufgang und Sonnenuntergang beinhaltet.
  917. </para>
  918. <table id="zend.date.other.sun.table">
  919. <title>Gewöhliche Methoden</title>
  920. <tgroup cols="2">
  921. <thead>
  922. <row>
  923. <entry>Methode</entry>
  924. <entry>Erklärung</entry>
  925. </row>
  926. </thead>
  927. <tbody>
  928. <row>
  929. <entry>
  930. <para>
  931. <emphasis>getSunrise($location)</emphasis>
  932. </para>
  933. </entry>
  934. <entry>Gibt die Zeit des Sonnenaufgangs dieses Datums zurück</entry>
  935. </row>
  936. <row>
  937. <entry>
  938. <para>
  939. <emphasis>getSunset($location)</emphasis>
  940. </para>
  941. </entry>
  942. <entry>Gibt die Zeit des Sonnenuntergangs dieses Datums zurück</entry>
  943. </row>
  944. <row>
  945. <entry>
  946. <para>
  947. <emphasis>getSunInfo($location)</emphasis>
  948. </para>
  949. </entry>
  950. <entry>Gibt ein Array mit den Sonnendaten des Datums zurück</entry>
  951. </row>
  952. </tbody>
  953. </tgroup>
  954. </table>
  955. </sect2>
  956. </sect1>
  957. <!--
  958. vim:se ts=4 sw=4 et:
  959. -->