| /* declarations for strftime.c | |
| Copyright (C) 2002, 2004, 2008-2026 Free Software Foundation, Inc. | |
| This file is free software: you can redistribute it and/or modify | |
| it under the terms of the GNU Lesser General Public License as | |
| published by the Free Software Foundation, either version 3 of the | |
| License, or (at your option) any later version. | |
| This file is distributed in the hope that it will be useful, | |
| but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| GNU Lesser General Public License for more details. | |
| You should have received a copy of the GNU Lesser General Public License | |
| along with this program. If not, see <https://www.gnu.org/licenses/>. */ | |
| #include <stddef.h> | |
| #include <time.h> | |
| #ifdef __cplusplus | |
| extern "C" { | |
| #endif | |
| /* Format the broken-down time *__TP, with additional __NS nanoseconds, | |
| into the buffer __S of size __MAXSIZE, according to the rules of the | |
| LC_TIME category of the current locale. | |
| Use the time zone __TZ. | |
| If *__TP represents local time, __TZ should be set to | |
| tzalloc (getenv ("TZ")). | |
| If *__TP represents universal time (a.k.a. GMT), __TZ should be set to | |
| (timezone_t) 0. | |
| The format string __FORMAT, including GNU extensions, is described in | |
| the GNU libc's strftime() documentation: | |
| <https://www.gnu.org/software/libc/manual/html_node/Formatting-Calendar-Time.html> | |
| Additionally, the following conversion is supported: | |
| %N The number of nanoseconds, passed as __NS argument. | |
| Here's a summary of the available conversions (= format directives): | |
| literal characters %n %t %% | |
| date: | |
| century %C | |
| year %Y %y | |
| week-based year %G %g | |
| month (in year) %m %B %b %h | |
| week in year %U %W %V | |
| day in year %j | |
| day (in month) %d %e | |
| day in week %u %w %A %a | |
| year, month, day %x %F %D | |
| time: | |
| half-day %p %P | |
| hour %H %k %I %l | |
| minute (in hour) %M | |
| hour, minute %R | |
| second (in minute) %S | |
| hour, minute, second %r %T %X | |
| second (since epoch) %s | |
| date and time: %c | |
| time zone: %z %Z | |
| nanosecond %N | |
| In locales with non-Gregorian calendars, the following conversions don't | |
| apply in the expected way: | |
| date: | |
| century %C | |
| year %y | |
| week-based year %G %g | |
| week in year %U %W %V | |
| day in year %j | |
| year, month, day %D | |
| Store the result, as a string with a trailing NUL character, at the | |
| beginning of the array __S[0..__MAXSIZE-1] and return the length of | |
| that string, not counting the trailing NUL. | |
| If unsuccessful, possibly change the array __S, set errno, and return -1; | |
| errno == ERANGE means the string didn't fit. | |
| As a glibc extension if __S is null, do not store anything, and | |
| return the value that would have been returned had __S been non-null. | |
| A __MAXSIZE greater than PTRDIFF_MAX is silently treated as if | |
| it were PTRDIFF_MAX, so that the caller can safely add 1 to | |
| any return value without overflow. | |
| This function is like strftime, but with two more arguments: | |
| * __TZ instead of the local timezone information, | |
| * __NS as the number of nanoseconds in the %N directive, | |
| and on success it does not preserve errno, | |
| and on failure it returns -1 not 0. | |
| */ | |
| ptrdiff_t nstrftime (char *restrict __s, size_t __maxsize, | |
| char const *__format, | |
| struct tm const *__tp, timezone_t __tz, int __ns); | |
| /* Like nstrftime, except that it uses the "C" locale instead of the | |
| current locale. */ | |
| ptrdiff_t c_nstrftime (char *restrict __s, size_t __maxsize, | |
| char const *__format, | |
| struct tm const *__tp, timezone_t __tz, int __ns); | |
| #ifdef __cplusplus | |
| } | |
| #endif |