Share via


localtime_s, _localtime32_s, _localtime64_s

Convertit une time_t valeur de temps en structure tm et corrige le fuseau horaire local. Ces fonctions sont des versions de , _localtime64_localtime32avec des améliorations de localtimesécurité, comme décrit dans les fonctionnalités de sécurité dans le CRT.

Syntaxe

errno_t localtime_s(
   struct tm* const tmDest,
   time_t const* const sourceTime
);
errno_t _localtime32_s(
   struct tm* tmDest,
   __time32_t const* sourceTime
);
errno_t _localtime64_s(
   struct tm* tmDest,
   __time64_t const* sourceTime
);

Paramètres

tmDest
Pointeur désignant la structure de temps à renseigner.

sourceTime
Pointeur désignant la valeur de temps stockée.

Valeur retournée

Zéro si l’opération aboutit. La valeur de retour est un code d’erreur en cas d’échec. Les codes d’erreur sont définis dans Errno.h. Pour obtenir la liste de ces erreurs, consultez errno.

Conditions de l’erreur

tmDest sourceTime Valeur retournée Valeur dans tmDest Appelle un gestionnaire de paramètres non valides
NULL tous EINVAL Non modifié Oui
Pas NULL (pointe vers une mémoire valide) NULL EINVAL Tous les champs définis sur -1 Oui
Pas NULL (pointe vers une mémoire valide) Inférieur à 0 ou supérieur à _MAX__TIME64_T EINVAL Tous les champs définis sur -1 Non

Les deux premières conditions d’erreur appellent le gestionnaire de paramètres non valide, comme décrit dans la validation des paramètres. Si l'exécution est autorisée à se poursuivre, ces fonctions attribuent à errno la valeur EINVAL et retournent EINVAL.

Notes

La localtime_s fonction convertit une heure stockée sous forme de time_t valeur et stocke le résultat dans une structure de type tm. La valeur time_tsourceTime représente les secondes écoulées depuis le 1er janvier 1970 à minuit (00:00:00), heure UTC. Cette valeur est souvent obtenue à partir de la time fonction.

localtime_s effectue une correction en fonction du fuseau horaire local si l’utilisateur définit d’abord la variable d’environnement globale TZ. Quand TZ est définie, les trois autres variables d’environnement (_timezone, _daylight et _tzname) sont également définies automatiquement. Si la TZ variable n’est pas définie, localtime_s tente d’utiliser les informations de fuseau horaire spécifiées dans l’application Date/Heure dans Panneau de configuration. Si ces informations ne peuvent pas être obtenues, PST8PDT, ce qui signifie que le fuseau horaire pacifique est utilisé par défaut. Consultez _tzset une description de ces variables. TZ est une extension Microsoft et ne fait pas partie de la définition de la norme ANSI de localtime.

Remarque

L’environnement cible doit tenter de déterminer si l’heure d’été est en vigueur.

_localtime64_s, qui utilise la structure __time64_t, permet d’exprimer les dates jusqu’au 18 janvier 3001 à 23:59:59,, heure UTC (temps universel coordonné), tandis que _localtime32_s représente les dates jusqu’au 18 janvier 2038 à 23:59:59, heure UTC.

localtime_s est une fonction inline qui prend la valeur _localtime64_s, tandis que time_t équivaut à __time64_t. Si vous devez forcer le compilateur à interpréter time_t comme l’ancien 32 bits time_t, vous pouvez définir _USE_32BIT_TIME_T, ce qui provoque localtime_s l’évaluation _localtime32_s. Nous vous déconseillons _USE_32BIT_TIME_T, car votre application peut échouer après le 18 janvier 2038 et elle n’est pas autorisée sur les plateformes 64 bits.

Les champs du type tm de structure stockent les valeurs suivantes, chacune d’elles étant un int.

Champ Description
tm_sec Secondes après la minute (0 - 59).
tm_min Minutes après l’heure (0 - 59).
tm_hour Heures depuis minuit (0 - 23).
tm_mday Jour du mois (1 à 31).
tm_mon Mois (0 - 11 ; Janvier = 0).
tm_year Année (année en cours moins 1900).
tm_wday Jour de la semaine (0 - 6 ; Dimanche = 0).
tm_yday Jour de l’année (0 - 365 ; 1er janvier = 0).
tm_isdst Valeur positive si l’heure d’été est en vigueur ; 0 si l’heure d’été n’est pas en vigueur ; valeur négative si l’état de l’heure d’été est inconnu.

Si la variable d’environnement TZ est définie, la bibliothèque runtime C suppose que les règles de calcul de l’heure d’été appropriées sont celles des États-Unis.

Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.

Spécifications

Routine En-tête C requis En-tête C++ requis
localtime_s, _localtime32_s, _localtime64_s <time.h> <ctime> ou <time.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility.

Exemple

// crt_localtime_s.c
// This program uses _time64 to get the current time
// and then uses _localtime64_s() to convert this time to a structure
// representing the local time. The program converts the result
// from a 24-hour clock to a 12-hour clock and determines the
// proper extension (AM or PM).

#include <stdio.h>
#include <string.h>
#include <time.h>

int main( void )
{
    struct tm newtime;
    char am_pm[] = "AM";
    __time64_t long_time;
    char timebuf[26];
    errno_t err;

    // Get time as 64-bit integer.
    _time64( &long_time );
    // Convert to local time.
    err = _localtime64_s( &newtime, &long_time );
    if (err)
    {
        printf("Invalid argument to _localtime64_s.");
        exit(1);
    }
    if( newtime.tm_hour > 12 )        // Set up extension.
        strcpy_s( am_pm, sizeof(am_pm), "PM" );
    if( newtime.tm_hour > 12 )        // Convert from 24-hour
        newtime.tm_hour -= 12;        // to 12-hour clock.
    if( newtime.tm_hour == 0 )        // Set hour to 12 if midnight.
        newtime.tm_hour = 12;

    // Convert to an ASCII representation.
    err = asctime_s(timebuf, 26, &newtime);
    if (err)
    {
        printf("Invalid argument to asctime_s.");
        exit(1);
    }
    printf( "%.19s %s\n", timebuf, am_pm );
}
Fri Apr 25 01:19:27 PM

Voir aussi

Gestion des horaires
asctime_s, _wasctime_s
ctime, _ctime32, _ctime64, _wctime, _wctime32, _wctime64
_ftime, _ftime32, _ftime64
gmtime_s, _gmtime32_s, _gmtime64_s
localtime, _localtime32, _localtime64
time, _time32, _time64
_tzset