strptime

Converts a character string into date and time values that are stored in a tm structure. Conversion is controlled by a format string.

Format

#include  <time.h>

char *strptime  (const char *buf, const char
                *format, struct tm *timeptr);
Function Variants This function also has variants named _strptime32 and _strptime64 for use with 32-bit and 64-bit pointer sizes, respectively. See Section 1.8 for more information on using pointer-size-specific functions.

Arguments

buf
A pointer to the character string to convert.
format
A pointer to the string that defines how the input string is converted.
timeptr
A pointer to the local time structure. The tm structure is defined in the <time.h> header file.

Description

This function converts the string pointed to by buf into values that are stored in the structure pointed to by timeptr. The string pointed to by format defines how the conversion is performed.

The format string consists of zero or more directives. A directive is composed of one of the following:

The strptime function uses fields in the LC_TIME category of the program's current locale to provide a value.

Table 11 strptime Conversion Specifications

Specification  Replaced by 
%a   The weekday name. This is either the abbreviated or the full name. 
%A   Same as %a 
%b   The month name. This is either the abbreviated or the full name. 
%B   Same as %b. 
%c   The date and time using the locale's date format 
%Ec   The locale's alternative date and time representation 
%C   The century number (the year divided by 100 and truncated to an integer) as a decimal number (00 - 99). Leading zeros are permitted. 
%EC   The name of the base year (period) in the locale's alternative representation 
%d   The day of the month as a decimal number (01 - 31). Leading zeros are permitted. 
%Od   The day of the month using the locale's alternative numeric symbols 
%D   Same as %m/%d /%y 
%e   Same as %d 
%Oe   The date of the month using the locale's alternative numeric symbols 
%h   Same as %b 
%H   The hour (24-hour clock) as a decimal number (00 - 23). Leading zeros are permitted. 
%OH   The hour (24-hour clock) using the locale's alternative numeric symbols 
%I   The hour (12- hour clock) as a decimal number (01 - 12). Leading zeros are permitted. 
%OI   The hour (12-hour clock) using the locale's alternative numeric symbols 
%j   The day of the year as a decimal number (001 - 366) 
%m   The month as a decimal number (01 - 12). Leading zeros are permitted. 
%Om   The month using the locale's alternative numeric symbols 
%M   The minute as a decimal number (00 - 59). Leading zeros are permitted. 
%OM   The minutes using the locale's alternative numeric symbols 
%n   Any whitespace character 
%p   The locale's equivalent of the AM/PM designations associated with a 12-hour clock 
%r   The time in AM/PM notation (%I:%M:%S %p)  
%R   The time in 24- hour notation (%H:%M) 
%S   The second as a decimal number (00 - 61). Leading zeros are permitted. 
%OS   The seconds using the locale's alternative numeric symbols 
%t   Any whitespace character 
%T   The time (%H:%M:%S) 
%U   The week number of the year (the first Sunday as the first day of week 1) as a decimal number (00 - 53). Leading zeros are permitted. 
%OU   The week number of the year (Sunday as the first day of the week) using the locale's alternative numeric symbols 
%w   The weekday as a decimal number (0 [Sunday] - 6). Leading zeros are permitted. 
%Ow   The weekday as a number (Sunday=0) using the locale's alternative numeric symbols 
%W   The week number of the year (the first Monday as the first day of week 1) as a decimal number (00 - 53). Leading zeros are permitted. 
%OW   The week number of the year (Monday as the first day of the week) using the locale's alternative numeric symbols 
%x   The locale's appropriate date representation 
%Ex   The locale's alternative date representation 
%EX   The locale's alternative time representation 
%X   The locale's appropriate time representation 
%y   The year without century as a decimal number (00 - 99) 
%Ey   The offset from the base year (%EC) in the locale's alternative representation 
%Oy   The year without the century using the locale's alternative numeric symbols 
%Y   The year with century as a decimal number 
%EY   The locale's full alternative year representation 
%%  

Return Values
A pointer to the character following the last character parsed. 
NULL  Indicates that an error occurred. The contents of the tm structure are undefined. 

Example

    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    #include <locale.h>
    #include <errno.h>
    
    #define NUM_OF_DATES  7
    #define BUF_SIZE 256
    
    /*
     * This program takes a number of date and time strings and converts them
     * into tm structs using strptime().  These tm structs are then passed to
     * strftime() which will reverse the process.  The resulting strings are then
     * compared with the originals and if a difference is found then an error
     * is displayed.
     */
    
    main()
    {
        int         count, i;
        char        buffer[BUF_SIZE];
        char        *ret_val;
        struct tm   time_struct;
        char        dates[NUM_OF_DATES][BUF_SIZE] = {
                            "Thursday 01 January 1970 00:08:20",
                            "Tuesday 29 February 1972 08:26:40",
                            "Tuesday 31 December 1991 23:59:59",
                            "Wednesday 01 January 1992 00:00:00",
                            "Sunday 03 May 1992 13:33:20",
                            "Monday 04 May 1992 17:20:00",
                            "Friday 15 May 1992 03:20:00"};
    
        for (i=0; i < NUM_OF_DATES; i++) {
            /* Convert to a tm structure */
            ret_val = strptime(dates[i], "%A %d %B %Y %T", &time_struct);
    
            /* Check the return value */
            if (ret_val == (char *)NULL) {
                perror("strptime");
                exit(EXIT_FAILURE);
            }
    
            /* Convert the time structure back to a formatted string */
            count = strftime(buffer, BUF_SIZE, "%A %d %B %Y %T", &time_struct);
    
            /* Check the return value */
            if (count == 0) {
                perror("strftime");
                exit(EXIT_FAILURE);
            }
    
            /* Check the result */
            if (strcmp(buffer, dates[i]) != 0) {
                printf("Error: Converted string differs from the original\n");
            }
            else {
                printf("Successfully converted <%s>\n", dates[i]);
            }
        }
    }
    

Running the example program produces the following result:

Successfully converted <Thursday 01 January 1970 00:08:20>
Successfully converted <Tuesday 29 February 1972 08:26:40>
Successfully converted <Tuesday 31 December 1991 23:59:59>
Successfully converted <Wednesday 01 January 1992 00:00:00>
Successfully converted <Sunday 03 May 1992 13:33:20>
Successfully converted <Monday 04 May 1992 17:20:00>
Successfully converted <Friday 15 May 1992 03:20:00>


Previous Page | Next Page | Table of Contents | Index