次の方法で共有


_get_tzname

タイム ゾーン名または夏時間標準時 (DST) ゾーン名の文字列形式を取得します。

構文

errno_t _get_tzname(
    size_t* pReturnValue,
    char* timeZoneName,
    size_t sizeInBytes,
    int index
);

パラメーター

pReturnValue
NULLターミネータを含むtimeZoneNameの文字列の長さ。

timeZoneName
index に基づき、タイム ゾーン名または夏時間ゾーン名 (DST) の文字列のアドレス。

sizeInBytes
timeZoneName 文字列のサイズ (バイト単位)。

index
取得する 2 つのタイム ゾーン名のいずれか 1 つの index

index timeZoneName の内容 timeZoneName の既定値
0 タイム ゾーン名 "PST"
1 夏時間ゾーン名 "PDT"
> 1 または < 0 errnoEINVAL に設定 変更されない

実行時に明示的に更新されない限り、 "PST" は標準タイム ゾーンに対して返され、夏時間標準タイム ゾーンの "PDT" が返されます。 詳細については、 Remarks を参照してください。

タイム ゾーン文字列は、OS リリース間で同じであるとは限りません。 公式のタイム ゾーン名は変更できます。

戻り値

正常に終了した場合は 0 を返し、それ以外の場合は errno タイプの値を返します。

timeZoneNameNULL、またはsizeInBytesが 0 未満 (両方ではない) の場合は、「パラメーターの検証」で説明されているように、無効なパラメーター ハンドラーが呼び出されます。 実行の継続が許可された場合、この関数は errnoEINVAL に設定し、EINVAL を返します。

エラー条件

pReturnValue timeZoneName sizeInBytes index 戻り値 timeZoneName の内容
TZ 名のサイズ NULL 0 0 または 1 0 変更されない
TZ 名のサイズ 任意 > 0 0 または 1 0 TZ 名
変更されない NULL > 0 任意 EINVAL 変更されない
変更されない 任意 ゼロ 任意 EINVAL 変更されない
変更されない 任意 > 0 > 1 EINVAL 変更されない

解説

_get_tzname関数は、現在のタイム ゾーン名または夏時間標準タイム ゾーン名 (DST) の文字列表現を、pReturnValueの文字列のサイズと共に、index値に応じてtimeZoneNameのアドレスに取得します。 timeZoneNameNULLで、sizeInBytesが 0 の場合、指定したタイム ゾーンと終了NULLの両方を保持するために必要な文字列のサイズ (バイト単位) がpReturnValueで返されます。

index値は、標準タイム ゾーンの場合は 0、夏時間標準タイム ゾーンの場合は 1 である必要があります。その他の値には未確定の結果があります。

既定では、 "PST" は標準タイム ゾーンに対して返され、夏時間標準タイム ゾーンの "PDT" が返されます。 正しいタイム ゾーン名は、 strftimeftimeftime_smktimelocaltimeなどのタイム ゾーン情報を必要とする関数が初めて必要とする場合に更新されます。 タイム ゾーン情報を必要としない関数が _get_tznameを呼び出す前に呼び出されない場合は、前述の関数のいずれかを使用して明示的に更新しない限り、または tzset の呼び出しによって既定値が返されます。 また、 TZ 環境変数が設定されている場合は、OS によって報告されるタイム ゾーン名よりも優先されます。 この場合でも、 _get_tzname が呼び出されるか、既定のタイム ゾーン値が返される前に、上記のいずれかの関数を呼び出す必要があります。 TZ環境変数と CRT の詳細については、_tzsetを参照してください。

警告

タイム ゾーン文字列は、OS リリース間で同じであるとは限りません。 公式のタイム ゾーン名は変更できます。

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT でのグローバル状態」を参照してください。

このサンプルでは、 _get_tzname を呼び出して、現在の Daylight 標準タイム ゾーン名を表示するために必要なバッファー サイズを取得し、そのサイズのバッファーを割り当て、 _get_tzname を再度呼び出してバッファーに名前を読み込み、コンソールに出力します。

また、_get_tzname()を呼び出す前に OS がタイム ゾーン情報を更新するように_tzset()も呼び出します。 それ以外の場合は、既定値が使用されます。

// crt_get_tzname.c
// Compile by using: cl /W4 crt_get_tzname.c
#include <stdio.h>
#include <time.h>
#include <malloc.h>

enum TZindex {
    STD,
    DST
};

int main()
{
    size_t tznameSize = 0;
    char * tznameBuffer = NULL;

    _tzset(); // Update the time zone information

    // Get the size of buffer required to hold DST time zone name
    if (_get_tzname(&tznameSize, NULL, 0, DST))
    {
        return 1;    // Return an error value if it failed
    }

    // Allocate a buffer for the name
    if (NULL == (tznameBuffer = (char *)(malloc(tznameSize))))
    {
        return 2;    // Return an error value if it failed
    }

    // Load the name in the buffer
    if (_get_tzname(&tznameSize, tznameBuffer, tznameSize, DST))
    {
        return 3;    // Return an error value if it failed
    }

    printf_s("The current Daylight standard time zone name is %s.\n", tznameBuffer);
    return 0;
}

出力

The current Daylight standard time zone name is Pacific Daylight Time.

要件

ルーチンによって返される値 必須ヘッダー
_get_tzname <time.h>

詳細については、「互換性」をご覧ください。

関連項目

時間管理
errno_doserrno_sys_errlist、および _sys_nerr
_get_daylight
_get_dstbias
_get_timezone