time: complete doc (#8070)
parent
204cc5fb01
commit
70ad49e186
|
@ -4,7 +4,7 @@ import rand
|
||||||
import time
|
import time
|
||||||
|
|
||||||
const (
|
const (
|
||||||
start_time_unix = time.now().unix
|
start_time_unix = time.now().unix // start_time_unix is set when the program is started.
|
||||||
)
|
)
|
||||||
|
|
||||||
// random returns a random time struct in *the past*.
|
// random returns a random time struct in *the past*.
|
||||||
|
|
|
@ -45,7 +45,7 @@ pub fn (t1 Time) >= (t2 Time) bool {
|
||||||
return t1 > t2 || t1 == t2
|
return t1 > t2 || t1 == t2
|
||||||
}
|
}
|
||||||
|
|
||||||
// Time subtract using eperator overloading
|
// Time subtract using operator overloading.
|
||||||
[inline]
|
[inline]
|
||||||
pub fn (lhs Time) - (rhs Time) Duration {
|
pub fn (lhs Time) - (rhs Time) Duration {
|
||||||
lhs_micro := lhs.unix * 1000 * 1000 + u64(lhs.microsecond)
|
lhs_micro := lhs.unix * 1000 * 1000 + u64(lhs.microsecond)
|
||||||
|
|
|
@ -7,6 +7,7 @@ pub struct StopWatchOptions {
|
||||||
auto_start bool = true
|
auto_start bool = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// StopWatch is used to measure elapsed time.
|
||||||
pub struct StopWatch {
|
pub struct StopWatch {
|
||||||
mut:
|
mut:
|
||||||
elapsed u64
|
elapsed u64
|
||||||
|
@ -15,6 +16,7 @@ pub mut:
|
||||||
end u64
|
end u64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// new_stopwatch initializes a new StopWatch with the current time as start.
|
||||||
pub fn new_stopwatch(opts StopWatchOptions) StopWatch {
|
pub fn new_stopwatch(opts StopWatchOptions) StopWatch {
|
||||||
mut initial := u64(0)
|
mut initial := u64(0)
|
||||||
if opts.auto_start {
|
if opts.auto_start {
|
||||||
|
@ -27,22 +29,25 @@ pub fn new_stopwatch(opts StopWatchOptions) StopWatch {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// start Starts the timer. If the timer was paused, restarts counting.
|
// start starts the stopwatch. If the timer was paused, restarts counting.
|
||||||
pub fn (mut t StopWatch) start() {
|
pub fn (mut t StopWatch) start() {
|
||||||
t.start = sys_mono_now()
|
t.start = sys_mono_now()
|
||||||
t.end = 0
|
t.end = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// restart restarts the stopwatch. If the timer was paused, restarts counting.
|
||||||
pub fn (mut t StopWatch) restart() {
|
pub fn (mut t StopWatch) restart() {
|
||||||
t.start = sys_mono_now()
|
t.start = sys_mono_now()
|
||||||
t.end = 0
|
t.end = 0
|
||||||
t.elapsed = 0
|
t.elapsed = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// stop stops the timer, by setting the end time to the current time.
|
||||||
pub fn (mut t StopWatch) stop() {
|
pub fn (mut t StopWatch) stop() {
|
||||||
t.end = sys_mono_now()
|
t.end = sys_mono_now()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// pause resets the `start` time and adds the current elapsed time to `elapsed`.
|
||||||
pub fn (mut t StopWatch) pause() {
|
pub fn (mut t StopWatch) pause() {
|
||||||
if t.start > 0 {
|
if t.start > 0 {
|
||||||
if t.end == 0 {
|
if t.end == 0 {
|
||||||
|
|
|
@ -37,6 +37,7 @@ const (
|
||||||
long_days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
|
long_days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Time contains various time units for a point in time.
|
||||||
pub struct Time {
|
pub struct Time {
|
||||||
pub:
|
pub:
|
||||||
year int
|
year int
|
||||||
|
@ -49,6 +50,7 @@ pub:
|
||||||
unix u64
|
unix u64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FormatDelimiter contains different time formats.
|
||||||
pub enum FormatTime {
|
pub enum FormatTime {
|
||||||
hhmm12
|
hhmm12
|
||||||
hhmm24
|
hhmm24
|
||||||
|
@ -59,6 +61,7 @@ pub enum FormatTime {
|
||||||
no_time
|
no_time
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FormatDelimiter contains different date formats.
|
||||||
pub enum FormatDate {
|
pub enum FormatDate {
|
||||||
ddmmyy
|
ddmmyy
|
||||||
ddmmyyyy
|
ddmmyyyy
|
||||||
|
@ -71,6 +74,7 @@ pub enum FormatDate {
|
||||||
yyyymmdd
|
yyyymmdd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FormatDelimiter contains different time/date delimiters.
|
||||||
pub enum FormatDelimiter {
|
pub enum FormatDelimiter {
|
||||||
dot
|
dot
|
||||||
hyphen
|
hyphen
|
||||||
|
@ -79,6 +83,7 @@ pub enum FormatDelimiter {
|
||||||
no_delimiter
|
no_delimiter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// C.timeval represents a C time value.
|
||||||
pub struct C.timeval {
|
pub struct C.timeval {
|
||||||
tv_sec u64
|
tv_sec u64
|
||||||
tv_usec u64
|
tv_usec u64
|
||||||
|
@ -109,7 +114,7 @@ pub fn now() Time {
|
||||||
return convert_ctime(now, 0)
|
return convert_ctime(now, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
// utc returns the current time in utc
|
// utc returns the current UTC time.
|
||||||
pub fn utc() Time {
|
pub fn utc() Time {
|
||||||
$if macos {
|
$if macos {
|
||||||
return darwin_utc()
|
return darwin_utc()
|
||||||
|
@ -195,8 +200,8 @@ fn since(t Time) int {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
// relative returns a string representation of difference between time
|
// relative returns a string representation of the difference between t
|
||||||
// and current time.
|
// and the current time.
|
||||||
pub fn (t Time) relative() string {
|
pub fn (t Time) relative() string {
|
||||||
znow := now()
|
znow := now()
|
||||||
secs := znow.unix - t.unix
|
secs := znow.unix - t.unix
|
||||||
|
@ -235,6 +240,19 @@ pub fn (t Time) relative() string {
|
||||||
return t.md()
|
return t.md()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// relative_short returns a string saying how long ago a time occured as follows:
|
||||||
|
// 0-30 seconds: `"now"`; 30-60 seconds: `"1m"`; anything else is rounded to the
|
||||||
|
// nearest minute, hour or day; anything higher than 10000 days (about 27 years)
|
||||||
|
// years returns an empty string.
|
||||||
|
// Some Examples:
|
||||||
|
// `0s -> 'now'`;
|
||||||
|
// `20s -> 'now'`;
|
||||||
|
// `47s -> '1m'`;
|
||||||
|
// `456s -> '7m'`;
|
||||||
|
// `1234s -> '20m'`;
|
||||||
|
// `16834s -> '4h'`;
|
||||||
|
// `1687440s -> '33d'`;
|
||||||
|
// `15842354871s -> ''`
|
||||||
pub fn (t Time) relative_short() string {
|
pub fn (t Time) relative_short() string {
|
||||||
znow := now()
|
znow := now()
|
||||||
secs := znow.unix - t.unix
|
secs := znow.unix - t.unix
|
||||||
|
@ -355,6 +373,7 @@ pub fn (t Time) str() string {
|
||||||
return t.format_ss()
|
return t.format_ss()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// convert_ctime converts a C time to V time.
|
||||||
fn convert_ctime(t C.tm, microsecond int) Time {
|
fn convert_ctime(t C.tm, microsecond int) Time {
|
||||||
return Time{
|
return Time{
|
||||||
year: t.tm_year + 1900
|
year: t.tm_year + 1900
|
||||||
|
@ -368,7 +387,7 @@ fn convert_ctime(t C.tm, microsecond int) Time {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// A lot of these are taken from the Go library
|
// A lot of these are taken from the Go library.
|
||||||
pub type Duration = i64
|
pub type Duration = i64
|
||||||
|
|
||||||
pub const (
|
pub const (
|
||||||
|
@ -419,7 +438,7 @@ pub fn (d Duration) hours() f64 {
|
||||||
return f64(hr) + f64(nsec) / (60 * 60 * 1e9)
|
return f64(hr) + f64(nsec) / (60 * 60 * 1e9)
|
||||||
}
|
}
|
||||||
|
|
||||||
// offset returns time zone UTC offset in seconds
|
// offset returns time zone UTC offset in seconds.
|
||||||
pub fn offset() int {
|
pub fn offset() int {
|
||||||
t := now()
|
t := now()
|
||||||
local := t.local()
|
local := t.local()
|
||||||
|
|
|
@ -1,25 +1,26 @@
|
||||||
module time
|
module time
|
||||||
|
|
||||||
|
// sys_mono_now_darwin - dummy fn to compile on all platforms/compilers
|
||||||
fn sys_mono_now_darwin() u64 {
|
fn sys_mono_now_darwin() u64 {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
// dummy to compile with all compilers
|
// darwin_now - dummy fn to compile on all platforms/compilers
|
||||||
pub fn darwin_now() Time {
|
pub fn darwin_now() Time {
|
||||||
return Time{}
|
return Time{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// dummy to compile with all compilers
|
// solaris_now - dummy fn to compile on all platforms/compilers
|
||||||
pub fn solaris_now() Time {
|
pub fn solaris_now() Time {
|
||||||
return Time{}
|
return Time{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// dummy to compile with all compilers
|
// darwin_utc - dummy fn to compile on all platforms/compilers
|
||||||
pub fn darwin_utc() Time {
|
pub fn darwin_utc() Time {
|
||||||
return Time{}
|
return Time{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// dummy to compile with all compilers
|
// solaris_utc - dummy fn to compile on all platforms/compilers
|
||||||
pub fn solaris_utc() Time {
|
pub fn solaris_utc() Time {
|
||||||
return Time{}
|
return Time{}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,6 +44,7 @@ mut:
|
||||||
// the first arg is defined in include/bits/types.h as `__S32_TYPE`, which is `int`
|
// the first arg is defined in include/bits/types.h as `__S32_TYPE`, which is `int`
|
||||||
fn C.clock_gettime(int, &C.timespec)
|
fn C.clock_gettime(int, &C.timespec)
|
||||||
|
|
||||||
|
// sys_mono_now returns a *monotonically increasing time*, NOT a time adjusted for daylight savings, location etc.
|
||||||
pub fn sys_mono_now() u64 {
|
pub fn sys_mono_now() u64 {
|
||||||
$if macos {
|
$if macos {
|
||||||
return sys_mono_now_darwin()
|
return sys_mono_now_darwin()
|
||||||
|
|
|
@ -71,6 +71,7 @@ fn init_win_time_start() u64 {
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// sys_mono_now returns a *monotonically increasing time*, NOT a time adjusted for daylight savings, location etc.
|
||||||
pub fn sys_mono_now() u64 {
|
pub fn sys_mono_now() u64 {
|
||||||
tm := u64(0)
|
tm := u64(0)
|
||||||
C.QueryPerformanceCounter(&tm) // XP or later never fail
|
C.QueryPerformanceCounter(&tm) // XP or later never fail
|
||||||
|
|
Loading…
Reference in New Issue