STRPTIME(3)

NOMBRE
strptime - convierte una cadena de caracteres que representa un tiempo a una estructura tm

SINOPSIS
#define _XOPEN_SOURCE /* Vea feature_test_macros(7) */
#include <time.h>

char *strptime(const char *s, const char *format, struct tm *tm);

DESCRIPCIÓN
The strptime() function is the converse of strftime(3); it converts the character string pointed to by s to values which are stored in the "broken-down time" structure pointed to by tm, using the format specified by format.

La estructura de tiempo descompuesto tm se define en <time.h> como sigue:

    struct tm {
        int tm_sec;    /* Seconds (0-60) */
        int tm_min;    /* Minutes (0-59) */
        int tm_hour;   /* Hours (0-23) */
        int tm_mday;   /* Day of the month (1-31) */
        int tm_mon;    /* Month (0-11) */
        int tm_year;   /* Year - 1900 */
        int tm_wday;   /* Day of the week (0-6, Sunday = 0) */
        int tm_yday;   /* Day in the year (0-365, 1 Jan = 0) */
        int tm_isdst;  /* Daylight saving time */
    };

For more details on the tm structure, see ctime(3).

The format argument is a character string that consists of field descriptors and text characters, reminiscent of scanf(3). Each field descriptor consists of a % character followed by another character that specifies the replacement for the field descriptor. All other characters in the format string must have a matching character in the input string, except for whitespace, which matches zero or more whitespace characters in the input string. There should be whitespace or other alphanumeric characters between any two field descriptors.

La función strptime() procesa la cadena de entrada de izquierda a derecha. Cada uno de los tres posibles elementos de entrada (espacio en blanco, literal o formato) se tratan uno detrás de otro. Si no se puede hacer coincidir la entrada con la cadena de formato, la función se detiene. El resto de las cadenas de formato y de entrada no se procesa.

The supported input field descriptors are listed below. In case a text string (such as the name of a day of the week or a month name) is to be matched, the comparison is case insensitive. In case a number is to be matched, leading zeros are permitted but not required.

%%  El carácter %.

%a o %A
    The name of the day of the week according to the current locale, in abbreviated form or the full name.

%b o %B o %h
    El nombre del mes según la localización actual, en forma abreviada o completa.

%c  La representación de fecha y hora para la localización actual.

%C  El número de siglo (0–99).

%d o %e
    El día del mes (1–31).

%D  Equivalent to %m/%d/%y. (This is the American style date, very confusing to non-Americans, especially since %d/%m/%y is widely used in Europe. The ISO 8601 standard format is %Y-%m-%d.)

%H  La hora (0–23).

%I  La hora en formato de 12 horas (1–12).

%j  El número de día del año (1–366).

%m  El número de mes (1–12).

%M  El minuto (0–59).

%n  Cadena arbitraria de espacios en blanco.

%p  El equivalente de AM o PM en la localización. (Nota: puede no existir.)

%r  The 12-hour clock time (using the locale's AM or PM). In the POSIX locale equivalent to %I:%M:%S %p. If t_fmt_ampm is empty in the LC_TIME part of the current locale, then the behavior is undefined.

%R  Equivalente a %H:%M.

%S  El segundo (0–60; 60 puede darse para segundos de salto (leap seconds); anteriormente también se permitía 61).

%t  Cadena arbitraria de espacios en blanco.

%T  Equivalente a %H:%M:%S.

%U  El número de semana tomando el domingo como primer día de la semana (0–53). El primer domingo de enero es el primer día de la semana 1.

%w  The ordinal number of the day of the week (0–6), with Sunday = 0.

%W  El número de semana tomando el lunes como primer día de la semana (0–53). El primer lunes de enero es el primer día de la semana 1.

%x  La fecha, usando el formato de fecha de la localización.

%X  La hora, usando el formato de hora de la localización.

%y  El año dentro del siglo (0–99). Cuando no se especifica el siglo, los valores comprendidos en el rango 69–99 se refieren al siglo 20 (1969–1999) y los valores comprendidos en el rango 00–68 se refieren al siglo 21 (2000–2068).

%Y  El año, incluyendo el siglo (por ejemplo, 1991).

Algunos descriptores de campo pueden ser modificados por los caracteres modificadores E u O para indicar el uso de un formato o especificación alternativo. Si el formato o especificación alternativo no existe en la localización actual, se utiliza el descriptor de campo sin modificar.

El modificador E especifica que la cadena de entrada puede contener versiones alternativas de la representación de fecha y hora dependientes de la localización:

%Ec La representación alternativa de fecha y hora de la localización.

%EC El nombre del año base (período) en la representación alternativa de la localización.

%Ex La representación alternativa de fecha de la localización.

%EX La representación alternativa de hora de la localización.

%Ey El desplazamiento desde %EC (sólo año) en la representación alternativa de la localización.

%EY La representación alternativa completa para el año.

El modificador O especifica que la entrada numérica puede estar en un formato alternativo dependiente de la localización:

%Od o %Oe
    El día del mes usando los símbolos numéricos alternativos de la localización; los ceros del comienzo están permitidos pero no son obligatorios.

%OH La hora (foramto 24 horas) usando los símbolos numéricos alternativos de la localización.

%OI La hora (foramto 12 horas) usando los símbolos numéricos alternativos de la localización.

%Om El mes usando los símbolos numéricos alternativos de la localización.

%OM Los minutos usando los símbolos numéricos alternativos de la localización.

%OS Los segundos usando los símbolos numéricos alternativos de la localización.

%OU El número de semana del año (tomando el domingo como primer día de la semana) usando los símbolos numéricos alternativos de la localización.

%Ow The ordinal number of the day of the week (Sunday=0),
     using the locale's alternative numeric symbols.

%OW El número de semana del año (tomando el lunes como primer día de la semana) usando los símbolos numéricos alternativos de la localización.

%Oy El año (desplazamiento desde %C) usando los símbolos numéricos alternativos de la localización.

VALOR DEVUELTO
The return value of the function is a pointer to the first character not processed in this function call. In case the input string contains more characters than required by the format string, the return value points right after the last consumed input character. In case the whole input string is consumed, the return value points to the null byte at the end of the string. If strptime() fails to match all of the format string and therefore an error occurred, the function returns NULL.

ATRIBUTOS
Para obtener una explicación de los términos usados en esta sección, véase attributes(7).
Interfaz | Atributo | Valor
strptime() | Seguridad del hilo | MT-Safe env locale

CONFORME A
POSIX.1-2001, POSIX.1-2008, SUSv2.

NOTAS
In principle, this function does not initialize tm but stores only the values specified. This means that tm should be initialized before the call. Details differ a bit between different UNIX systems. The glibc implementation does not touch those fields which are not explicitly specified, except that it recomputes the tm_wday and tm_yday field if any of the year, month, or day elements changed.

The 'y' (year in century) specification is taken to specify a year in the range 1950–2049 by glibc 2.0. It is taken to be a year in 1969–2068 since glibc 2.1.

  Glibc notes
Por razones de simetría, glibc trata de dar soporte en strptime() a los mismos caracteres de formato que para strftime(3). (En la mayoría de casos se analizan los campos correspondientes, pero no se modifica ningún campo de la estructura tm.) Esto conduce a

%F  Equivalente a %Y-%m-%d, el formato de fecha de ISO 8601.

%g  El año correspondiente al número de semana ISO, pero sin el siglo (0–99).

%G  El año correspondiente al número de semana ISO. (Por ejemplo, 1991.)

%u  El día de la semana como un número decimal (1–7, donde lunes = 1).

%V  El número de semana ISO 8601:1988 como un número decimal (1–53). Si la semana (comenzando en lunes) que contiene el 1 de enero tiene cuatro o más días en el nuevo año, se considera la semana 1. En otro caso, se toma como la última semana del año anterior y la siguiente semana pasa a ser la semana 1.

%z  Una especificación estándar RFC-822/ISO 8601 de huso horario.

%Z  El nombre del huso horario.

Similarly, because of GNU extensions to strftime(3), %k is accepted as a synonym for %H, and %l should be accepted as a synonym for %I, and %P is accepted as a synonym for %p. Finally

%s  The number of seconds since the Epoch, 1970-01-01 00:00:00 +0000 (UTC). Leap seconds are not counted unless leap second support is available.

The glibc implementation does not require whitespace between two field descriptors.

EJEMPLOS
El siguiente ejemplo demuestra el uso de strptime() y strftime(3).

    #define _XOPEN_SOURCE
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>

    int
    main(void)
    {
        struct tm tm;
        char buf[255];

        memset(&tm, 0, sizeof(tm));
        strptime("2001-11-12 18:31:01", "%Y-%m-%d %H:%M:%S", &tm);
        strftime(buf, sizeof(buf), "%d %b %Y %H:%M", &tm);
        puts(buf);
        exit(EXIT_SUCCESS);
    }

VÉASE TAMBIÉN
time(2), getdate(3), scanf(3), setlocale(3), strftime(3)

COLOFÓN
Esta página es parte de la versión 5.10 del proyecto Linux man-pages. Puede encontrar una descripción del proyecto, información sobre cómo informar errores y la última versión de esta página en https://www.kernel.org/doc/man-pages/.

TRADUCCIÓN
La traducción al español de esta página del manual fue creada por Gerardo Aburruzaga García <gerardo.aburruzaga@uca.es>, Juan Piernas <piernas@ditec.um.es> y Miguel Pérez Ibars <mpi79470@alu.um.es>

Esta traducción es documentación libre; lea la GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.

Si encuentra algún error en la traducción de esta página del manual, envíe un correo electrónico a debian-l10n-spanish@lists.debian.org.