summaryrefslogtreecommitdiff
path: root/StdLib/Include/time.h
diff options
context:
space:
mode:
Diffstat (limited to 'StdLib/Include/time.h')
-rw-r--r--StdLib/Include/time.h311
1 files changed, 311 insertions, 0 deletions
diff --git a/StdLib/Include/time.h b/StdLib/Include/time.h
new file mode 100644
index 0000000000..386629cc6b
--- /dev/null
+++ b/StdLib/Include/time.h
@@ -0,0 +1,311 @@
+/** @file
+ The header <time.h> defines two macros, and declares several types and
+ functions for manipulating time. Many functions deal with a calendar time
+ that represents the current date (according to the Gregorian calendar) and
+ time. Some functions deal with local time, which is the calendar time
+ expressed for some specific time zone, and with Daylight Saving Time, which
+ is a temporary change in the algorithm for determining local time. The local
+ time zone and Daylight Saving Time are implementation-defined.
+
+ The macros defined are NULL; and CLOCKS_PER_SEC which expands to an
+ expression with type clock_t (described below) that is the number per second
+ of the value returned by the clock function.
+
+ The types declared are size_t along with clock_t and time_t which are
+ arithmetic types capable of representing times; and struct tm which holds
+ the components of a calendar time, called the broken-down time.
+
+ The range and precision of times representable in clock_t and time_t are
+ implementation-defined. The tm structure shall contain at least the following
+ members, in any order. The semantics of the members and their normal ranges
+ are expressed in the comments.
+ - int tm_sec; // seconds after the minute - [0, 60]
+ - int tm_min; // minutes after the hour - [0, 59]
+ - int tm_hour; // hours since midnight - [0, 23]
+ - int tm_mday; // day of the month - [1, 31]
+ - int tm_mon; // months since January - [0, 11]
+ - int tm_year; // years since 1900
+ - int tm_wday; // days since Sunday - [0, 6]
+ - int tm_yday; // days since January 1 - [0, 365]
+ - int tm_isdst; // Daylight Saving Time flag
+
+ The value of tm_isdst is positive if Daylight Saving Time is in effect, zero
+ if Daylight Saving Time is not in effect, and negative if the information
+ is not available.
+
+ Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
+ This program and the accompanying materials are licensed and made available under
+ the terms and conditions of the BSD License that accompanies this distribution.
+ The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php.
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+#ifndef _TIME_H
+#define _TIME_H
+#include <sys/EfiCdefs.h>
+
+#define CLOCKS_PER_SEC __getCPS()
+
+#ifdef _EFI_SIZE_T_
+ typedef _EFI_SIZE_T_ size_t;
+ #undef _EFI_SIZE_T_
+ #undef _BSD_SIZE_T_
+#endif
+
+/** An arithmetic type capable of representing values returned by clock(); **/
+#ifdef _EFI_CLOCK_T
+ typedef _EFI_CLOCK_T clock_t;
+ #undef _EFI_CLOCK_T
+#endif
+
+/** An arithmetic type capable of representing values returned as calendar time
+ values, such as that returned by mktime();
+**/
+#ifdef _EFI_TIME_T
+ typedef _EFI_TIME_T time_t;
+ #undef _EFI_TIME_T
+#endif
+
+/** A structure holding the components of a calendar time, called the
+ broken-down time. The first nine (9) members are as mandated by the
+ C95 standard. Additional fields have been added for EFI support.
+**/
+struct tm {
+ int tm_year; // years since 1900
+ int tm_mon; // months since January — [0, 11]
+ int tm_mday; // day of the month — [1, 31]
+ int tm_hour; // hours since midnight — [0, 23]
+ int tm_min; // minutes after the hour — [0, 59]
+ int tm_sec; // seconds after the minute — [0, 60]
+ int tm_wday; // days since Sunday — [0, 6]
+ int tm_yday; // days since January 1 — [0, 365]
+ int tm_isdst; // Daylight Saving Time flag
+ int tm_zoneoff; // EFI TimeZone offset, -1440 to 1440 or 2047
+ int tm_daylight; // EFI Daylight flags
+ UINT32 tm_Nano; // EFI Nanosecond value
+};
+
+/* ############### Time Manipulation Functions ########################## */
+
+/** The clock function determines the processor time used.
+
+ @return The clock function returns the implementation’s best
+ approximation to the processor time used by the program since the
+ beginning of an implementation-defined era related only to the
+ program invocation. To determine the time in seconds, the value
+ returned by the clock function should be divided by the value of
+ the macro CLOCKS_PER_SEC. If the processor time used is not
+ available or its value cannot be represented, the function
+ returns the value (clock_t)(-1).
+
+ On IA32 or X64 platforms, the value returned is the number of
+ CPU TimeStamp Counter ticks since the appliation started.
+**/
+clock_t EFIAPI clock(void);
+
+/**
+**/
+double EFIAPI difftime(time_t time1, time_t time0);
+
+/** The mktime function converts the broken-down time, expressed as local time,
+ in the structure pointed to by timeptr into a calendar time value with the
+ same encoding as that of the values returned by the time function. The
+ original values of the tm_wday and tm_yday components of the structure are
+ ignored, and the original values of the other components are not
+ restricted to the ranges indicated above.270) On successful completion,
+ the values of the tm_wday and tm_yday components of the structure are set
+ appropriately, and the other components are set to represent the specified
+ calendar time, but with their values forced to the ranges indicated above;
+ the final value of tm_mday is not set until tm_mon and tm_year
+ are determined.
+
+ @return The mktime function returns the specified calendar time encoded
+ as a value of type time_t. If the calendar time cannot be
+ represented, the function returns the value (time_t)(-1).
+**/
+time_t EFIAPI mktime(struct tm *timeptr);
+
+/**
+**/
+time_t EFIAPI time(time_t *timer);
+
+/* ################# Time Conversion Functions ########################## */
+
+/**
+**/
+char * EFIAPI asctime(const struct tm *timeptr);
+
+/**
+**/
+char * EFIAPI ctime(const time_t *timer);
+
+/**
+**/
+struct tm * EFIAPI gmtime(const time_t *timer);
+
+/**
+**/
+struct tm * EFIAPI localtime(const time_t *timer);
+
+/** The strftime function places characters into the array pointed to by s as
+ controlled by the string pointed to by format. The format shall be a
+ multibyte character sequence, beginning and ending in its initial shift
+ state. The format string consists of zero or more conversion specifiers
+ and ordinary multibyte characters. A conversion specifier consists of
+ a % character, possibly followed by an E or O modifier character
+ (described below), followed by a character that determines the behavior of
+ the conversion specifier.
+
+ All ordinary multibyte characters (including the terminating null
+ character) are copied unchanged into the array. If copying takes place
+ between objects that overlap, the behavior is undefined. No more than
+ maxsize characters are placed into the array. 3 Each conversion specifier
+ is replaced by appropriate characters as described in the following list.
+ The appropriate characters are determined using the LC_TIME category of
+ the current locale and by the values of zero or more members of the
+ broken-down time structure pointed to by timeptr, as specified in brackets
+ in the description. If any of the specified values is outside the normal
+ range, the characters stored are unspecified.
+
+ %a is replaced by the locale’s abbreviated weekday name. [tm_wday]
+ %A is replaced by the locale’s full weekday name. [tm_wday]
+ %b is replaced by the locale’s abbreviated month name. [tm_mon]
+ %B is replaced by the locale’s full month name. [tm_mon]
+ %c is replaced by the locale’s appropriate date and time representation.
+ %C is replaced by the year divided by 100 and truncated to an integer,
+ as a decimal number (00-99). [tm_year]
+ %d is replaced by the day of the month as a decimal number (01-31). [tm_mday]
+ %D is equivalent to "%m/%d/%y". [tm_mon, tm_mday, tm_year]
+ %e is replaced by the day of the month as a decimal number (1-31);
+ a single digit is preceded by a space. [tm_mday]
+ %F is equivalent to "%Y-%m-%d" (the ISO 8601 date format).
+ [tm_year, tm_mon, tm_mday]
+ %g is replaced by the last 2 digits of the week-based year (see below) as
+ a decimal number (00-99). [tm_year, tm_wday, tm_yday]
+ %G is replaced by the week-based year (see below) as a decimal number
+ (e.g., 1997). [tm_year, tm_wday, tm_yday]
+ %h is equivalent to "%b". [tm_mon]
+ %H is replaced by the hour (24-hour clock) as a decimal number (00-23). [tm_hour]
+ %I is replaced by the hour (12-hour clock) as a decimal number (01-12). [tm_hour]
+ %j is replaced by the day of the year as a decimal number (001-366). [tm_yday]
+ %m is replaced by the month as a decimal number (01-12). [tm_mon]
+ %M is replaced by the minute as a decimal number (00-59). [tm_min]
+ %n is replaced by a new-line character.
+ %p is replaced by the locale’s equivalent of the AM/PM designations
+ associated with a 12-hour clock. [tm_hour]
+ %r is replaced by the locale’s 12-hour clock time. [tm_hour, tm_min, tm_sec]
+ %R is equivalent to "%H:%M". [tm_hour, tm_min]
+ %S is replaced by the second as a decimal number (00-60). [tm_sec]
+ %t is replaced by a horizontal-tab character.
+ %T is equivalent to "%H:%M:%S" (the ISO 8601 time format).
+ [tm_hour, tm_min, tm_sec]
+ %u is replaced by the ISO 8601 weekday as a decimal number (1-7),
+ where Monday is 1. [tm_wday]
+ %U is replaced by the week number of the year (the first Sunday as the
+ first day of week 1) as a decimal number (00-53). [tm_year, tm_wday, tm_yday]
+ %V is replaced by the ISO 8601 week number (see below) as a decimal number
+ (01-53). [tm_year, tm_wday, tm_yday]
+ %w is replaced by the weekday as a decimal number (0-6), where Sunday is 0.
+ [tm_wday]
+ %W is replaced by the week number of the year (the first Monday as the
+ first day of week 1) as a decimal number (00-53). [tm_year, tm_wday, tm_yday]
+ %x is replaced by the locale’s appropriate date representation.
+ %X is replaced by the locale’s appropriate time representation.
+ %y is replaced by the last 2 digits of the year as a decimal
+ number (00-99). [tm_year]
+ %Y is replaced by the year as a decimal number (e.g., 1997). [tm_year]
+ %z is replaced by the offset from UTC in the ISO 8601 format "-0430"
+ (meaning 4 hours 30 minutes behind UTC, west of Greenwich), or by no
+ characters if no time zone is determinable. [tm_isdst]
+ %Z is replaced by the locale's time zone name or abbreviation, or by no
+ characters if no time zone is determinable. [tm_isdst]
+ %% is replaced by %.
+
+ Some conversion specifiers can be modified by the inclusion of an E or O
+ modifier character to indicate an alternative format or specification.
+ If the alternative format or specification does not exist for the current
+ locale, the modifier is ignored. %Ec is replaced by the locale’s
+ alternative date and time representation.
+
+ %EC is replaced by the name of the base year (period) in the locale’s
+ alternative representation.
+ %Ex is replaced by the locale’s alternative date representation.
+ %EX is replaced by the locale’s alternative time representation.
+ %Ey is replaced by the offset from %EC (year only) in the locale’s
+ alternative representation.
+ %EY is replaced by the locale’s full alternative year representation.
+ %Od is replaced by the day of the month, using the locale’s alternative
+ numeric symbols (filled as needed with leading zeros, or with leading
+ spaces if there is no alternative symbol for zero).
+ %Oe is replaced by the day of the month, using the locale’s alternative
+ numeric symbols (filled as needed with leading spaces).
+ %OH is replaced by the hour (24-hour clock), using the locale’s
+ alternative numeric symbols.
+ %OI is replaced by the hour (12-hour clock), using the locale’s
+ alternative numeric symbols.
+ %Om is replaced by the month, using the locale’s alternative numeric symbols.
+ %OM is replaced by the minutes, using the locale’s alternative numeric symbols.
+ %OS is replaced by the seconds, using the locale’s alternative numeric symbols.
+ %Ou is replaced by the ISO 8601 weekday as a number in the locale’s
+ alternative representation, where Monday is 1.
+ %OU is replaced by the week number, using the locale’s alternative numeric symbols.
+ %OV is replaced by the ISO 8601 week number, using the locale’s alternative
+ numeric symbols.
+ %Ow is replaced by the weekday as a number, using the locale’s alternative
+ numeric symbols.
+ %OW is replaced by the week number of the year, using the locale’s
+ alternative numeric symbols.
+ %Oy is replaced by the last 2 digits of the year, using the locale’s
+ alternative numeric symbols.
+
+ %g, %G, and %V give values according to the ISO 8601 week-based year. In
+ this system, weeks begin on a Monday and week 1 of the year is the week
+ that includes January 4th, which is also the week that includes the first
+ Thursday of the year, and is also the first week that contains at least
+ four days in the year. If the first Monday of January is the 2nd, 3rd, or
+ 4th, the preceding days are part of the last week of the preceding year;
+ thus, for Saturday 2nd January 1999, %G is replaced by 1998 and %V is
+ replaced by 53. If December 29th, 30th, or 31st is a Monday, it and any
+ following days are part of week 1 of the following year. Thus, for Tuesday
+ 30th December 1997, %G is replaced by 1998 and %V is replaced by 01.
+
+ If a conversion specifier is not one of the above, the behavior is undefined.
+
+ In the "C" locale, the E and O modifiers are ignored and the replacement
+ strings for the following specifiers are:
+ %a the first three characters of %A.
+ %A one of "Sunday", "Monday", ... , "Saturday".
+ %b the first three characters of %B.
+ %B one of "January", "February", ... , "December".
+ %c equivalent to "%a %b %e %T %Y".
+ %p one of "AM" or "PM".
+ %r equivalent to "%I:%M:%S %p".
+ %x equivalent to "%m/%d/%y".
+ %X equivalent to %T.
+ %Z implementation-defined.
+
+ @param s Pointer to the buffer in which to store the result.
+ @param maxsize Maximum number of characters to put into buffer s.
+ @param format Format string, as described above.
+ @param timeptr Pointer to a broken-down time structure containing the
+ time to format.
+
+ @return If the total number of resulting characters including the
+ terminating null character is not more than maxsize, the
+ strftime function returns the number of characters placed into
+ the array pointed to by s not including the terminating null
+ character. Otherwise, zero is returned and the contents of the
+ array are indeterminate.
+**/
+size_t EFIAPI strftime( char * __restrict s, size_t maxsize,
+ const char * __restrict format,
+ const struct tm * __restrict timeptr);
+
+/* ################# Implementation Functions ########################### */
+
+clock_t EFIAPI __getCPS(void);
+
+#endif /* _TIME_H */