/// Formats time as a time string for a locale specified by name. The function formats either a specified time or the local system time.
/// </para>
/// <para>
/// <c>Note</c> This function can format data that changes between releases, for example, due to a custom locale. If your application
/// must persist or transmit data, see Using Persistent Locale Data.
/// </para>
/// </summary>
/// <param name="lpLocaleName">
/// <para>Pointer to a locale name, or one of the following predefined values.</para>
/// <list type="bullet">
/// <item>
/// <term>LOCALE_NAME_INVARIANT</term>
/// </item>
/// <item>
/// <term>LOCALE_NAME_SYSTEM_DEFAULT</term>
/// </item>
/// <item>
/// <term>LOCALE_NAME_USER_DEFAULT</term>
/// </item>
/// </list>
/// </param>
/// <param name="dwFlags">
/// <para>
/// Flags specifying time format options. The application can specify a combination of the following values and LOCALE_USE_CP_ACP or LOCALE_NOUSEROVERRIDE.
/// </para>
/// <para><c>Caution</c> Use of LOCALE_NOUSEROVERRIDE is strongly discouraged as it disables user preferences.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>TIME_NOMINUTESORSECONDS</term>
/// <term>Do not use minutes or seconds.</term>
/// </item>
/// <item>
/// <term>TIME_NOSECONDS</term>
/// <term>Do not use seconds.</term>
/// </item>
/// <item>
/// <term>TIME_NOTIMEMARKER</term>
/// <term>Do not use a time marker.</term>
/// </item>
/// <item>
/// <term>TIME_FORCE24HOURFORMAT</term>
/// <term>Always use a 24-hour time format.</term>
/// </item>
/// </list>
/// </param>
/// <param name="lpTime">
/// Pointer to a SYSTEMTIME structure that contains the time information to format. The application can set this parameter to
/// <c>NULL</c> if the function is to use the current local system time.
/// </param>
/// <param name="lpFormat">
/// Pointer to a format picture to use to format the time string. If the application sets this parameter to <c>NULL</c>, the function
/// formats the string according to the time format of the specified locale. If the application does not set the parameter to
/// <c>NULL</c>, the function uses the locale only for information not specified in the format picture string, for example, the
/// locale-specific time markers. For information about the format picture string, see the Remarks section.
/// </param>
/// <param name="lpTimeStr">Pointer to a buffer in which this function retrieves the formatted time string.</param>
/// <param name="cchTime">
/// Size, in characters, for the time string buffer indicated by lpTimeStr. Alternatively, the application can set this parameter to
/// 0. In this case, the function returns the required size for the time string buffer, and does not use the lpTimeStr parameter.
/// </param>
/// <returns>
/// <para>
/// Returns the number of characters retrieved in the buffer indicated by lpTimeStr. If the cchTime parameter is set to 0, the
/// function returns the size of the buffer required to hold the formatted time string, including a terminating null character.
/// </para>
/// <para>
/// This function returns 0 if it does not succeed. To get extended error information, the application can call GetLastError, which
/// can return one of the following error codes:
/// </para>
/// <list type="bullet">
/// <item>
/// <term>ERROR_INSUFFICIENT_BUFFER. A supplied buffer size was not large enough, or it was incorrectly set to <c>NULL</c>.</term>
/// </item>
/// <item>
/// <term>ERROR_INVALID_FLAGS. The values supplied for flags were not valid.</term>
/// </item>
/// <item>
/// <term>ERROR_INVALID_PARAMETER. Any of the parameter values was invalid.</term>
/// </item>
/// <item>
/// <term>ERROR_OUTOFMEMORY. Not enough storage was available to complete this operation.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>
/// If a time marker exists and the TIME_NOTIMEMARKER flag is not set, the function localizes the time marker based on the specified
/// locale identifier. Examples of time markers are "AM" and "PM" for English (United States).
/// </para>
/// <para>
/// The time values in the structure indicated by lpTime must be valid. The function checks each of the time values to determine that
/// it is within the appropriate range of values. If any of the time values are outside the correct range, the function fails, and
/// sets the last error to ERROR_INVALID_PARAMETER.
/// </para>
/// <para>
/// The function ignores the date members of the SYSTEMTIME structure. These include: <c>wYear</c>, <c>wMonth</c>, <c>wDayOfWeek</c>,
/// and <c>wDay</c>.
/// </para>
/// <para>
/// If TIME_NOMINUTESORSECONDS or TIME_NOSECONDS is specified, the function removes the separators preceding the minutes and/or
/// seconds members.
/// </para>
/// <para>If TIME_NOTIMEMARKER is specified, the function removes the separators preceding and following the time marker.</para>
/// <para>
/// If TIME_FORCE24HOURFORMAT is specified, the function displays any existing time marker, unless the TIME_NOTIMEMARKER flag is also set.
/// </para>
/// <para>The function does not include milliseconds as part of the formatted time string.</para>
/// <para>
/// The function returns no errors for a bad format string, but just forms the best possible time string. If more than two hour,
/// minute, second, or time marker format pictures are passed in, the function defaults to two. For example, the only time marker
/// pictures that are valid are "t" and "tt". If "ttt" is passed in, the function assumes "tt".
/// </para>
/// <para>
/// To obtain the time format without performing any actual formatting, the application should use the GetLocaleInfoEx function,
/// specifying LOCALE_STIMEFORMAT.
/// </para>
/// <para>
/// The application can use the following elements to construct a format picture string. If spaces are used to separate the elements
/// in the format string, these spaces appear in the same location in the output string. The letters must be in uppercase or
/// lowercase as shown, for example, "ss", not "SS". Characters in the format string that are enclosed in single quotation marks
/// appear in the same location and unchanged in the output string.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Picture</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>h</term>
/// <term>Hours with no leading zero for single-digit hours; 12-hour clock</term>
/// </item>
/// <item>
/// <term>hh</term>
/// <term>Hours with leading zero for single-digit hours; 12-hour clock</term>
/// </item>
/// <item>
/// <term>H</term>
/// <term>Hours with no leading zero for single-digit hours; 24-hour clock</term>
/// </item>
/// <item>
/// <term>HH</term>
/// <term>Hours with leading zero for single-digit hours; 24-hour clock</term>
/// </item>
/// <item>
/// <term>m</term>
/// <term>Minutes with no leading zero for single-digit minutes</term>
/// </item>
/// <item>
/// <term>mm</term>
/// <term>Minutes with leading zero for single-digit minutes</term>
/// </item>
/// <item>
/// <term>s</term>
/// <term>Seconds with no leading zero for single-digit seconds</term>
/// </item>
/// <item>
/// <term>ss</term>
/// <term>Seconds with leading zero for single-digit seconds</term>
/// </item>
/// <item>
/// <term>t</term>
/// <term>One character time marker string, such as A or P</term>
/// </item>
/// <item>
/// <term>tt</term>
/// <term>Multi-character time marker string, such as AM or PM</term>
/// </item>
/// </list>
/// <para>For example, to get the time string</para>
/// <para>the application should use the picture string</para>
/// <para>
/// This function can retrieve data from custom locales. Data is not guaranteed to be the same from computer to computer or between
/// runs of an application. If your application must persist or transmit data, see Using Persistent Locale Data.
/// </para>
/// <para>
/// <c>Beginning in Windows 8:</c> If your app passes language tags to this function from the Windows.Globalization namespace, it
/// must first convert the tags by calling ResolveLocaleName.
/// </para>
/// <para>
/// <c>Beginning in Windows 8:</c><c>GetTimeFormatEx</c> is declared in Datetimeapi.h. Before Windows 8, it was declared in Winnls.h.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/desktop/api/datetimeapi/nf-datetimeapi-gettimeformatex int GetTimeFormatEx( LPCWSTR
/// Formats time as a time string for a locale specified by name. The function formats either a specified time or the local system time.
/// </para>
/// <para>
/// <c>Note</c> This function can format data that changes between releases, for example, due to a custom locale. If your application
/// must persist or transmit data, see Using Persistent Locale Data.
/// </para>
/// </summary>
/// <param name="lpLocaleName">
/// <para>Pointer to a locale name, or one of the following predefined values.</para>
/// <list type="bullet">
/// <item>
/// <term>LOCALE_NAME_INVARIANT</term>
/// </item>
/// <item>
/// <term>LOCALE_NAME_SYSTEM_DEFAULT</term>
/// </item>
/// <item>
/// <term>LOCALE_NAME_USER_DEFAULT</term>
/// </item>
/// </list>
/// </param>
/// <param name="dwFlags">
/// <para>
/// Flags specifying time format options. The application can specify a combination of the following values and LOCALE_USE_CP_ACP or LOCALE_NOUSEROVERRIDE.
/// </para>
/// <para><c>Caution</c> Use of LOCALE_NOUSEROVERRIDE is strongly discouraged as it disables user preferences.</para>
/// <list type="table">
/// <listheader>
/// <term>Value</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>TIME_NOMINUTESORSECONDS</term>
/// <term>Do not use minutes or seconds.</term>
/// </item>
/// <item>
/// <term>TIME_NOSECONDS</term>
/// <term>Do not use seconds.</term>
/// </item>
/// <item>
/// <term>TIME_NOTIMEMARKER</term>
/// <term>Do not use a time marker.</term>
/// </item>
/// <item>
/// <term>TIME_FORCE24HOURFORMAT</term>
/// <term>Always use a 24-hour time format.</term>
/// </item>
/// </list>
/// </param>
/// <param name="lpTime">
/// Pointer to a SYSTEMTIME structure that contains the time information to format. The application can set this parameter to
/// <c>NULL</c> if the function is to use the current local system time.
/// </param>
/// <param name="lpFormat">
/// Pointer to a format picture to use to format the time string. If the application sets this parameter to <c>NULL</c>, the function
/// formats the string according to the time format of the specified locale. If the application does not set the parameter to
/// <c>NULL</c>, the function uses the locale only for information not specified in the format picture string, for example, the
/// locale-specific time markers. For information about the format picture string, see the Remarks section.
/// </param>
/// <param name="lpTimeStr">Pointer to a buffer in which this function retrieves the formatted time string.</param>
/// <param name="cchTime">
/// Size, in characters, for the time string buffer indicated by lpTimeStr. Alternatively, the application can set this parameter to
/// 0. In this case, the function returns the required size for the time string buffer, and does not use the lpTimeStr parameter.
/// </param>
/// <returns>
/// <para>
/// Returns the number of characters retrieved in the buffer indicated by lpTimeStr. If the cchTime parameter is set to 0, the
/// function returns the size of the buffer required to hold the formatted time string, including a terminating null character.
/// </para>
/// <para>
/// This function returns 0 if it does not succeed. To get extended error information, the application can call GetLastError, which
/// can return one of the following error codes:
/// </para>
/// <list type="bullet">
/// <item>
/// <term>ERROR_INSUFFICIENT_BUFFER. A supplied buffer size was not large enough, or it was incorrectly set to <c>NULL</c>.</term>
/// </item>
/// <item>
/// <term>ERROR_INVALID_FLAGS. The values supplied for flags were not valid.</term>
/// </item>
/// <item>
/// <term>ERROR_INVALID_PARAMETER. Any of the parameter values was invalid.</term>
/// </item>
/// <item>
/// <term>ERROR_OUTOFMEMORY. Not enough storage was available to complete this operation.</term>
/// </item>
/// </list>
/// </returns>
/// <remarks>
/// <para>
/// If a time marker exists and the TIME_NOTIMEMARKER flag is not set, the function localizes the time marker based on the specified
/// locale identifier. Examples of time markers are "AM" and "PM" for English (United States).
/// </para>
/// <para>
/// The time values in the structure indicated by lpTime must be valid. The function checks each of the time values to determine that
/// it is within the appropriate range of values. If any of the time values are outside the correct range, the function fails, and
/// sets the last error to ERROR_INVALID_PARAMETER.
/// </para>
/// <para>
/// The function ignores the date members of the SYSTEMTIME structure. These include: <c>wYear</c>, <c>wMonth</c>, <c>wDayOfWeek</c>,
/// and <c>wDay</c>.
/// </para>
/// <para>
/// If TIME_NOMINUTESORSECONDS or TIME_NOSECONDS is specified, the function removes the separators preceding the minutes and/or
/// seconds members.
/// </para>
/// <para>If TIME_NOTIMEMARKER is specified, the function removes the separators preceding and following the time marker.</para>
/// <para>
/// If TIME_FORCE24HOURFORMAT is specified, the function displays any existing time marker, unless the TIME_NOTIMEMARKER flag is also set.
/// </para>
/// <para>The function does not include milliseconds as part of the formatted time string.</para>
/// <para>
/// The function returns no errors for a bad format string, but just forms the best possible time string. If more than two hour,
/// minute, second, or time marker format pictures are passed in, the function defaults to two. For example, the only time marker
/// pictures that are valid are "t" and "tt". If "ttt" is passed in, the function assumes "tt".
/// </para>
/// <para>
/// To obtain the time format without performing any actual formatting, the application should use the GetLocaleInfoEx function,
/// specifying LOCALE_STIMEFORMAT.
/// </para>
/// <para>
/// The application can use the following elements to construct a format picture string. If spaces are used to separate the elements
/// in the format string, these spaces appear in the same location in the output string. The letters must be in uppercase or
/// lowercase as shown, for example, "ss", not "SS". Characters in the format string that are enclosed in single quotation marks
/// appear in the same location and unchanged in the output string.
/// </para>
/// <list type="table">
/// <listheader>
/// <term>Picture</term>
/// <term>Meaning</term>
/// </listheader>
/// <item>
/// <term>h</term>
/// <term>Hours with no leading zero for single-digit hours; 12-hour clock</term>
/// </item>
/// <item>
/// <term>hh</term>
/// <term>Hours with leading zero for single-digit hours; 12-hour clock</term>
/// </item>
/// <item>
/// <term>H</term>
/// <term>Hours with no leading zero for single-digit hours; 24-hour clock</term>
/// </item>
/// <item>
/// <term>HH</term>
/// <term>Hours with leading zero for single-digit hours; 24-hour clock</term>
/// </item>
/// <item>
/// <term>m</term>
/// <term>Minutes with no leading zero for single-digit minutes</term>
/// </item>
/// <item>
/// <term>mm</term>
/// <term>Minutes with leading zero for single-digit minutes</term>
/// </item>
/// <item>
/// <term>s</term>
/// <term>Seconds with no leading zero for single-digit seconds</term>
/// </item>
/// <item>
/// <term>ss</term>
/// <term>Seconds with leading zero for single-digit seconds</term>
/// </item>
/// <item>
/// <term>t</term>
/// <term>One character time marker string, such as A or P</term>
/// </item>
/// <item>
/// <term>tt</term>
/// <term>Multi-character time marker string, such as AM or PM</term>
/// </item>
/// </list>
/// <para>For example, to get the time string</para>
/// <para>the application should use the picture string</para>
/// <para>
/// This function can retrieve data from custom locales. Data is not guaranteed to be the same from computer to computer or between
/// runs of an application. If your application must persist or transmit data, see Using Persistent Locale Data.
/// </para>
/// <para>
/// <c>Beginning in Windows 8:</c> If your app passes language tags to this function from the Windows.Globalization namespace, it
/// must first convert the tags by calling ResolveLocaleName.
/// </para>
/// <para>
/// <c>Beginning in Windows 8:</c><c>GetTimeFormatEx</c> is declared in Datetimeapi.h. Before Windows 8, it was declared in Winnls.h.
/// </para>
/// </remarks>
// https://docs.microsoft.com/en-us/windows/desktop/api/datetimeapi/nf-datetimeapi-gettimeformatex int GetTimeFormatEx( LPCWSTR