X-Git-Url: http://nitlanguage.org diff --git a/lib/standard/time.nit b/lib/standard/time.nit index 6e9c8c0..11ba1fe 100644 --- a/lib/standard/time.nit +++ b/lib/standard/time.nit @@ -11,11 +11,93 @@ # another product. # Management of time and dates -package time +module time -import kernel +import string_search + +in "C Header" `{ + #include +`} redef class Object # Unix time: the number of seconds elapsed since January 1, 1970 protected fun get_time: Int is extern "kernel_Any_Any_get_time_0" end + +redef class Sys + # Wait a specific number of second and nanoseconds + fun nanosleep(sec, nanosec: Int) is extern "std_nanosleep" +end + +# Time since epoch +extern class TimeT `{time_t`} + new `{ return time(NULL); `} + new from_i(i: Int) `{ return i; `} + + fun update `{ time(&recv); `} + + fun ctime: String import NativeString.to_s_with_copy `{ + return NativeString_to_s_with_copy( ctime(&recv) ); + `} + + # Difference in secondes from start (self if the end time) + fun difftime(start: TimeT): Float `{ return difftime(recv, start); `} + + redef fun to_s do return ctime.replace("\n", "") + fun to_i: Int `{ return (int)recv; `} +end + +# Time structure +extern class Tm `{struct tm *`} + new gmtime `{ + struct tm *tm; + time_t t = time(NULL); + tm = gmtime(&t); + return tm; + `} + new gmtime_from_timet(t: TimeT) `{ + struct tm *tm; + tm = gmtime(&t); + return tm; + `} + + new localtime `{ + struct tm *tm; + time_t t = time(NULL); + tm = localtime(&t); + return tm; + `} + new localtime_from_timet(t: TimeT) `{ + struct tm *tm; + tm = localtime(&t); + return tm; + `} + + fun to_timet: TimeT `{ return mktime(recv); `} + + fun sec: Int `{ return recv->tm_sec; `} + fun min: Int `{ return recv->tm_min; `} + fun hour: Int `{ return recv->tm_hour; `} + fun mday: Int `{ return recv->tm_mday; `} + fun mon: Int `{ return recv->tm_mon; `} + fun year: Int `{ return recv->tm_year; `} + fun wday: Int `{ return recv->tm_wday; `} + fun yday: Int `{ return recv->tm_yday; `} + fun is_dst: Bool `{ return recv->tm_isdst; `} + + fun asctime: String import NativeString.to_s_with_copy `{ + return NativeString_to_s_with_copy( asctime(recv) ); + `} + fun strftime(format: String): String import String.to_cstring, NativeString.to_s `{ + char* buf, *c_format; + size_t res; + + buf = (char*)malloc(100); + c_format = String_to_cstring(format); + + res = strftime(buf, 100, c_format, recv); + return NativeString_to_s(buf); + `} + + redef fun to_s do return asctime.replace("\n", "") +end