mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
time: complete doc (#8070)
This commit is contained in:
parent
204cc5fb01
commit
70ad49e186
@ -4,7 +4,7 @@ import rand
|
||||
import time
|
||||
|
||||
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*.
|
||||
|
@ -45,7 +45,7 @@ pub fn (t1 Time) >= (t2 Time) bool {
|
||||
return t1 > t2 || t1 == t2
|
||||
}
|
||||
|
||||
// Time subtract using eperator overloading
|
||||
// Time subtract using operator overloading.
|
||||
[inline]
|
||||
pub fn (lhs Time) - (rhs Time) Duration {
|
||||
lhs_micro := lhs.unix * 1000 * 1000 + u64(lhs.microsecond)
|
||||
|
@ -7,6 +7,7 @@ pub struct StopWatchOptions {
|
||||
auto_start bool = true
|
||||
}
|
||||
|
||||
// StopWatch is used to measure elapsed time.
|
||||
pub struct StopWatch {
|
||||
mut:
|
||||
elapsed u64
|
||||
@ -15,6 +16,7 @@ pub mut:
|
||||
end u64
|
||||
}
|
||||
|
||||
// new_stopwatch initializes a new StopWatch with the current time as start.
|
||||
pub fn new_stopwatch(opts StopWatchOptions) StopWatch {
|
||||
mut initial := u64(0)
|
||||
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() {
|
||||
t.start = sys_mono_now()
|
||||
t.end = 0
|
||||
}
|
||||
|
||||
// restart restarts the stopwatch. If the timer was paused, restarts counting.
|
||||
pub fn (mut t StopWatch) restart() {
|
||||
t.start = sys_mono_now()
|
||||
t.end = 0
|
||||
t.elapsed = 0
|
||||
}
|
||||
|
||||
// stop stops the timer, by setting the end time to the current time.
|
||||
pub fn (mut t StopWatch) stop() {
|
||||
t.end = sys_mono_now()
|
||||
}
|
||||
|
||||
// pause resets the `start` time and adds the current elapsed time to `elapsed`.
|
||||
pub fn (mut t StopWatch) pause() {
|
||||
if t.start > 0 {
|
||||
if t.end == 0 {
|
||||
|
@ -37,6 +37,7 @@ const (
|
||||
long_days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
|
||||
)
|
||||
|
||||
// Time contains various time units for a point in time.
|
||||
pub struct Time {
|
||||
pub:
|
||||
year int
|
||||
@ -49,6 +50,7 @@ pub:
|
||||
unix u64
|
||||
}
|
||||
|
||||
// FormatDelimiter contains different time formats.
|
||||
pub enum FormatTime {
|
||||
hhmm12
|
||||
hhmm24
|
||||
@ -59,6 +61,7 @@ pub enum FormatTime {
|
||||
no_time
|
||||
}
|
||||
|
||||
// FormatDelimiter contains different date formats.
|
||||
pub enum FormatDate {
|
||||
ddmmyy
|
||||
ddmmyyyy
|
||||
@ -71,6 +74,7 @@ pub enum FormatDate {
|
||||
yyyymmdd
|
||||
}
|
||||
|
||||
// FormatDelimiter contains different time/date delimiters.
|
||||
pub enum FormatDelimiter {
|
||||
dot
|
||||
hyphen
|
||||
@ -79,6 +83,7 @@ pub enum FormatDelimiter {
|
||||
no_delimiter
|
||||
}
|
||||
|
||||
// C.timeval represents a C time value.
|
||||
pub struct C.timeval {
|
||||
tv_sec u64
|
||||
tv_usec u64
|
||||
@ -109,7 +114,7 @@ pub fn now() Time {
|
||||
return convert_ctime(now, 0)
|
||||
}
|
||||
|
||||
// utc returns the current time in utc
|
||||
// utc returns the current UTC time.
|
||||
pub fn utc() Time {
|
||||
$if macos {
|
||||
return darwin_utc()
|
||||
@ -195,8 +200,8 @@ fn since(t Time) int {
|
||||
return 0
|
||||
}
|
||||
|
||||
// relative returns a string representation of difference between time
|
||||
// and current time.
|
||||
// relative returns a string representation of the difference between t
|
||||
// and the current time.
|
||||
pub fn (t Time) relative() string {
|
||||
znow := now()
|
||||
secs := znow.unix - t.unix
|
||||
@ -235,6 +240,19 @@ pub fn (t Time) relative() string {
|
||||
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 {
|
||||
znow := now()
|
||||
secs := znow.unix - t.unix
|
||||
@ -355,6 +373,7 @@ pub fn (t Time) str() string {
|
||||
return t.format_ss()
|
||||
}
|
||||
|
||||
// convert_ctime converts a C time to V time.
|
||||
fn convert_ctime(t C.tm, microsecond int) Time {
|
||||
return Time{
|
||||
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 const (
|
||||
@ -419,7 +438,7 @@ pub fn (d Duration) hours() f64 {
|
||||
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 {
|
||||
t := now()
|
||||
local := t.local()
|
||||
|
@ -1,25 +1,26 @@
|
||||
module time
|
||||
|
||||
// sys_mono_now_darwin - dummy fn to compile on all platforms/compilers
|
||||
fn sys_mono_now_darwin() u64 {
|
||||
return 0
|
||||
}
|
||||
|
||||
// dummy to compile with all compilers
|
||||
// darwin_now - dummy fn to compile on all platforms/compilers
|
||||
pub fn darwin_now() Time {
|
||||
return Time{}
|
||||
}
|
||||
|
||||
// dummy to compile with all compilers
|
||||
// solaris_now - dummy fn to compile on all platforms/compilers
|
||||
pub fn solaris_now() Time {
|
||||
return Time{}
|
||||
}
|
||||
|
||||
// dummy to compile with all compilers
|
||||
// darwin_utc - dummy fn to compile on all platforms/compilers
|
||||
pub fn darwin_utc() Time {
|
||||
return Time{}
|
||||
}
|
||||
|
||||
// dummy to compile with all compilers
|
||||
// solaris_utc - dummy fn to compile on all platforms/compilers
|
||||
pub fn solaris_utc() Time {
|
||||
return Time{}
|
||||
}
|
||||
|
@ -44,6 +44,7 @@ mut:
|
||||
// the first arg is defined in include/bits/types.h as `__S32_TYPE`, which is `int`
|
||||
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 {
|
||||
$if macos {
|
||||
return sys_mono_now_darwin()
|
||||
|
@ -71,6 +71,7 @@ fn init_win_time_start() u64 {
|
||||
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 {
|
||||
tm := u64(0)
|
||||
C.QueryPerformanceCounter(&tm) // XP or later never fail
|
||||
|
Loading…
Reference in New Issue
Block a user