1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00
v/vlib/time
2023-04-04 13:47:48 +03:00
..
misc rand: simplify rand.PRNG, move to optional types for error handling (#13570) 2022-02-23 12:36:14 +02:00
chrono_test.v vfmt: change all '$expr' to '${expr}' (#16428) 2022-11-15 16:53:13 +03:00
chrono.c.v time: change days_from_civil to days_from_unix_epoch, add date_from_days_after_unix_epoch (#16363) 2022-11-13 14:30:14 +02:00
chrono.v time: change days_from_civil to days_from_unix_epoch, add date_from_days_after_unix_epoch (#16363) 2022-11-13 14:30:14 +02:00
custom_format_test.v time: add custom formatter (#14202) 2022-04-29 15:57:08 +03:00
duration_test.v time: add Duration.str() (#12897) 2021-12-19 19:32:42 +02:00
format.v all: 2023 copyright 2023-03-28 22:55:57 +02:00
operator_test.v vlib: remove many deprecated functions (#10972) 2021-07-28 09:22:19 +03:00
operator.v time: turn Time.unix to i64, so it can represent times before 1970-01-01, fix time operators, add more tests (#11050) 2021-08-04 13:12:02 +03:00
parse_test.v time: do not panic for time.parse("2020-02-02 20.02.20")!, just return an error instead (fix #16779) 2022-12-27 13:01:01 +02:00
parse.c.v all: 2023 copyright 2023-03-28 22:55:57 +02:00
parse.js.v all: fix dependant->dependent typos, cleanup comments 2022-12-02 12:51:10 +02:00
parse.v all: 2023 copyright 2023-03-28 22:55:57 +02:00
private_test.v tests: make vlib/time/private_test.v more robust/tolerant to small fluctuations 2022-08-20 13:56:10 +03:00
README.md vfmt: change all '$expr' to '${expr}' (#16428) 2022-11-15 16:53:13 +03:00
relative_test.v time: relative update (#14240) 2022-05-01 10:47:05 +03:00
stopwatch_test.v all: replace "NB:" with "Note:" (docs/comments) 2022-03-06 20:01:22 +03:00
stopwatch.v all: 2023 copyright 2023-03-28 22:55:57 +02:00
time_addition_test.v db, json, time, term: change optional to result (#16201) 2022-10-26 11:26:28 +03:00
time_darwin.c.v builder: search for .v files in /src/ if there are none 2022-07-03 08:41:26 +03:00
time_format_test.v time: extend date str formats (#9543) 2021-04-01 13:04:59 +03:00
time_js.js.v gg: add text rendering, keyboard event handling for JS and other fixes (#12932) 2021-12-22 12:26:52 +02:00
time_linux.c.v time: complete doc (#8070) 2021-01-13 16:30:54 +02:00
time_nix.c.v all: 2023 copyright 2023-03-28 22:55:57 +02:00
time_solaris.c.v time: fix V compilation for solaris 2021-07-24 11:17:54 +03:00
time_test.v cgen: allow using of original operation if alias is number and no custom method is defined (#17718) 2023-03-21 11:39:58 +02:00
time_windows.c.v all: 2023 copyright 2023-03-28 22:55:57 +02:00
time.c.v all: 2023 copyright 2023-03-28 22:55:57 +02:00
time.js.v gg: add text rendering, keyboard event handling for JS and other fixes (#12932) 2021-12-22 12:26:52 +02:00
time.v fmt: remove redundant parenthesis in the complex infix expr (#17873) 2023-04-04 13:47:48 +03:00
unix.v all: 2023 copyright 2023-03-28 22:55:57 +02:00
utc_vs_local_time_test.v time: add more UTC/local time conversion functions, make Time.format_rfc3339 more stable 2022-12-11 13:34:01 +02:00
Y2K38_test.v all: replace "NB:" with "Note:" (docs/comments) 2022-03-06 20:01:22 +03:00

Description:

V's time module, provides utilities for working with time and dates:

  • parsing of time values expressed in one of the commonly used standard time/date formats
  • formatting of time values
  • arithmetic over times/durations
  • converting between local time and UTC (timezone support)
  • stop watches for accurately measuring time durations
  • sleeping for a period of time

Examples:

You can see the current time. See:

import time

println(time.now())

time.Time values can be compared, see:

import time

const time_to_test = time.Time{
	year: 1980
	month: 7
	day: 11
	hour: 21
	minute: 23
	second: 42
	microsecond: 123456
	unix: 332198622
}

println(time_to_test.format())

assert '1980-07-11 21:23' == time_to_test.format()
assert '1980-07-11 21:23:42' == time_to_test.format_ss()
assert '1980-07-11 21:23:42.123' == time_to_test.format_ss_milli()
assert '1980-07-11 21:23:42.123456' == time_to_test.format_ss_micro()

You can also parse strings to produce time.Time values, see:

import time

s := '2018-01-27 12:48:34'
t := time.parse(s) or { panic('failing format: ${s} | err: ${err}') }
println(t)
println(t.unix)

V's time module also has these parse methods:

fn parse(s string) !Time
fn parse_iso8601(s string) !Time
fn parse_rfc2822(s string) !Time
fn parse_rfc3339(s string) !Time

Another very useful feature of the time module is the stop watch, for when you want to measure short time periods, elapsed while you executed other tasks. See:

import time

fn do_something() {
	time.sleep(510 * time.millisecond)
}

fn main() {
	sw := time.new_stopwatch()
	do_something()
	println('Note: do_something() took: ${sw.elapsed().milliseconds()} ms')
}