viv:parse-date
Analyse une chaîne et en extrait la date
Synopsis
string viv:parse-date (date-str, format, timezone, range); string date-str; string format; string timezone; boolean range;
Arguments
- date-str : chaîne de date à analyser.
- format : chaîne de formatage indiquant le format de la date fournie comme premier argument. Si ce paramètre n'est pas spécifié, la fonction tentera d'appliquer les plages de date répertoriées plus haut dans ce document.
- timezone : chaîne identifiant le fuseau horaire à utiliser. Il peut s'agir d'un décalage horaire numérique ou d'une abréviation de fuseau horaire, comme indiqué précédemment dans le présent document de référence. Si ce paramètre n'est pas spécifié, la valeur par défaut du fuseau horaire est 'localtime'.
- range : si la valeur de ce paramètre est true, valeur booléenne indiquant la plage de dates valide sous forme de valeur 32 bits. La valeur par défaut est false(), ce qui ne restreint pas la plage de dates aux valeurs 32 bits. Si la vérification 32 bits est activée, les dates en dehors de la plage 32 bits et toute autre date non valide renvoient la valeur '0'.
Description
Tente d'analyser une chaîne et d'en extraire une date. La valeur renvoyée par cette fonction correspond à la date extraite représentée par le nombre de secondes écoulées depuis 00:00:00 le 1er janvier 1970 dans le fuseau horaire UTC (temps universel coordonné).
La chaîne format facultative indique comment la date doit être analysée. Les spécificateurs de format sont conçus pour être compatibles avec les chaînes au format PHP ou C strftime(). Cette fonction prend en charge les codes suivants :
- %a ou %A - Nom du jour de la semaine, abrégé (par exemple, "Mon") ou complet ("Monday").
- %b, %B, or %h - Nom du mois, abrégé (par exemple, "Jan") ou complet ("January").
- %c - Raccourci de l'heure et de la date au format %a %b %e %H:%M:%S %Y. Par exemple, Mon Jul 7 15:30:45 2007.
- %C - Siècle (00-99).
- %d ou %e - Jour du mois (1-31), précédé ou non de zéros non significatifs.
- %D - Raccourci de la date, au format %m/%d/%y. Par exemple, 03/19/06.
- %F - Raccourci de la date au format %Y-%m-%d. Par exemple, 2004-09-25.
- %H - Heure au format 24 heures (00-23), sous la forme d'un nombre à deux chiffres précédé de zéros non significatifs.
- %I - Heure au format 12 heures (01-12), sous la forme d'un nombre à deux chiffres précédé de zéro non significatifs. Requiert %p, le spécificateur "AM/PM", à inclure dans la chaîne de format.
- %j - Numéro du jour dans l'année (1-366), précédé ou non de zéros significatifs.
- %k - Heure au format 24 heures (0-23), sous la forme d'un nombre d'un ou deux chiffres non précédé de zéros non significatifs.
- %l - Heure au format 12 heures (1-12), sous la forme d'un nombre d'un ou deux chiffres non précédé de zéros non significatifs. Requiert %p, le spécificateur "AM/PM", à inclure dans la chaîne de format.
- %m - Numéro du mois (1-12), précédé ou non de zéros non significatifs.
- %M - Minutes (0-59), précédées ou non de zéros non significatifs.
- %n - Caractère de retour à la ligne.
- %p - "AM" ou "PM", "am" ou "pm". Requis si vous utilisez le format 12 heures.
- %r - Raccourci de l'heure au format 12 heures : %I:%M:%S %p. Par exemple, 10:40:22 PM.
- %R - Raccourci de l'heure au format 24 heures sans les secondes : %H:%M.
- %s - Nombre de secondes écoulées depuis l'époque Unix (00:00:00 UTC au 1er janvier 1970).
- %S - Secondes (0-61), précédées ou non de zéros non significatifs.
- %t - Caractère de tabulation.
- %T - Raccourci de l'heure 24 heures avec les secondes : %H:%M:%S. Par exemple, 23:59:59.
- %u - Numéro du jour de la semaine (1-7), précédé ou non de zéros non significatifs, la valeur 1 correspondant au lundi.
- %U - Numéro de la semaine de l'année (0-53), précédé ou non de zéros non significatifs, le dimanche correspondant au premier jour de la semaine.
- %w - Numéro du jour de la semaine (0-6), précédé ou non de zéros non significatifs, la valeur 0 correspondant au dimanche.
- %W - Numéro de la semaine de l'année (0-53), précédé ou non de zéros non significatifs, le lundi correspondant au premier jour de la semaine.
- %y - Année à deux chiffres, précédée ou non de zéros non significatifs, la plage 69-99 correspondant aux années 1969-1999 et la plage 00-68, aux années 2000-2068.
- %Y - Année à 4 chiffres.
- %Z - Fuseau horaire. Le fuseau peut être spécifié sous la forme d'une abréviation standard (liste ci-dessous) ou d'un décalage positif ou négatif en heures (et éventuellement en minutes).
- %% - Caractère %.
Dans la chaîne format, le caractère espace correspond à tout nombre de caractères blancs.
Les décalages de fuseau horaire numérique peuvent se présenter dans des formats tels que les suivants : +0200, -03:30, +12 ou -5. Les abréviations de fuseau horaire prises en charge sont les suivantes : GMT, UT, UTC, Z, WET, WEST, BST, ART, BRT, BRST, NST, NDT, AST, ADT, CLT, CLST, EST, EDT, CST, CDT, MST, MDT, PST, PDT, AKST, AKDT, HST, HAST, HADT, SST, WAT, CET, CEST, MET, MEZ, MEST, MESZ, EET, EEST, CAT, SAST, EAT, MSK, MSD, IST, SGT, KST, JST, GST, NZST et NZDT.
La valeur par défaut du paramètre de format est une chaîne vide, '""'. Si une chaîne format n'est pas spécifiée, les formats de date suivants sont automatiquement reconnus :
- RFC 2616 3.3.1 (protocole HTTP), qui prend en charge :
- Sun, 06 Nov 1994 08:49:37 GMT
- Sunday, 06-Nov-94 08:49:37 GMT
- Sun Nov 6 08:49:37 1994
- Dates sans nom du jour de la semaine :
- 06 Nov 1994 08:49:37 GMT
- 06-Nov-94 08:49:37 GMT
- Nov 6 08:49:37 1994
- Dates sans le fuseau horaire :
- 06 Nov 1994 08:49:37
- 06-Nov-94 08:49:37
- 1994-11-06 08:49:37 PM
- 1994-11-06 20:49:37
- 1994/11/06 08:49:37 PM
- 1994/11/06 20:49:37
- 11-06-1994 08:49:37 PM
- 11-06-1994 20:49:37 PM
- 11/06/1994 08:49:37 PM
- 11/06/1994 20:49:37
- 19941106204937
- 1994-11-06T20:49:37
- Dates dans un ordre bizarre :
- 1994 Nov 6 08:49:37
- GMT 08:49:37 06-Nov-94 Sunday
- 94 6 Nov 08:49:37
- Dates sans l'heure :
- 1994 Nov 6
- 06-Nov-94
- Sun Nov 6 94
- 1994/11/06
- 1994-11-06
- 19941106
- 11/06/1994
- 11-06-1994
- Dates avec des séparateurs inhabituels :
- 1994.Nov.6
- Sun/Nov/6/94/GMT
- Fuseaux horaires indiqués dans le style RFC 822 :
- Sun, 12 Sep 2004 15:05:58 -0700
- Sat, 11 Sep 2004 21:32:11 +0200
- Chaînes de date numérique compactes :
- 20040912 15:05:58 -0700
- 20040911 +0200
Renvois
Nombre de secondes écoulées depuis 00:00:00 le 1er janvier 1970, heure UTC (temps universel coordonné) ou 0 si l'argument en entrée n'a pas pu être analysé.
Exemple
Exemple d'entrée :
<process-xsl>
<xsl:variable name="datesec" select="viv:parse-date('06-Nov-94')" />
<datesec><xsl:value-of select="$datesec" /></datesec>
<date><xsl:value-of select="viv:seconds-to-local-date-time($datesec)" /></date>
<timezone><xsl:value-of select="viv:time-zone-name()" /></timezone>
</process-xsl>
Exemple de sortie :
<datesec>784080000</datesec>
<date>1994-11-05T20:00:00-04:00</date>
<timezone>EDT</timezone>
Problèmes connus
La fonction viv:parse-date() ne prend en charge les dates 32 bits que sur les systèmes Linux 32 bits.
Remarques
Indexation rapide et type de date
Lors d'une indexation rapide d'une zone contenant une date, Watson Explorer Engine fournit un type de date pour automatiser la conversion des valeurs de temps exprimées sous forme de chaînes. Dans un index rapide, les zones déclarées comme de type date traitent automatiquement leur contenu à l'aide de viv:parse-date. Pour cette raison, vous ne devez pas utiliser viv:parse-date pour traiter des variables d'indexation rapide de type date.
Soit le contenu suivant :
<document xmlns:xi="http://www.w3.org/2003/XInclude">
<content name="last-update">Thu, 29 Mar 2007 15:20:01 +0100</content>
</document>
Si vous réalisez une indexation rapide de la zone last-update en tant que date (last-update|date), l'indexeur réalisera automatiquement une indexation rapide du résultat de viv:parse-date(content[@name="last-update"]). Dans ce cas, la valeur indexée rapidement sera un nombre entier (1175178001). Par défaut, si elle est utilisée dans une indexation rapide, la fonction viv:parse-date limite les valeurs de dates à 32 bits. Pour indexer rapidement les dates en dehors de cette plage, utilisez la fonction viv:parse-date manuellement et indexez rapidement la valeur résultante comme un nombre entier. Toute recherche sur cette zone doit être exprimée en valeur entière (ou convertie en valeur entière avant d'effectuer la recherche) pour que la comparaison fonctionne correctement.