v/vlib/time
Delyan Angelov 21c46f4ae5
Some checks are pending
Tools CI / tools-linux (clang) (push) Waiting to run
Graphics CI / gg-regressions (push) Waiting to run
vlib modules CI / build-module-docs (push) Waiting to run
Shy and PV CI / v-compiles-puzzle-vibes (push) Waiting to run
sdl CI / v-compiles-sdl-examples (push) Waiting to run
Time CI / time-linux (push) Waiting to run
Time CI / time-macos (push) Waiting to run
Time CI / time-windows (push) Waiting to run
toml CI / toml-module-pass-external-test-suites (push) Waiting to run
Tools CI / tools-linux (gcc) (push) Waiting to run
Tools CI / tools-linux (tcc) (push) Waiting to run
Tools CI / tools-macos (clang) (push) Waiting to run
Tools CI / tools-windows (gcc) (push) Waiting to run
Tools CI / tools-windows (msvc) (push) Waiting to run
Tools CI / tools-windows (tcc) (push) Waiting to run
Tools CI / tools-docker-ubuntu-musl (push) Waiting to run
vab CI / vab-compiles-v-examples (push) Waiting to run
vab CI / v-compiles-os-android (push) Waiting to run
time: move the nanosecond comparison before the rest in the Time == Time implementation
2025-09-05 19:28:29 +03:00
..
misc fmt: remove the prefixed module name of const names, that are in the same module (related #22183) (#22185) 2024-09-10 11:25:56 +03:00
chrono.c.v docs: check vlib/time too in the report-missing-dots-in-doc-comments job 2025-07-21 18:43:40 +03:00
chrono.v fmt: fix alignment of struct init fields (#22025) 2024-08-11 09:11:24 +03:00
chrono_test.v vfmt: change all '$expr' to '${expr}' (#16428) 2022-11-15 16:53:13 +03:00
custom_format_test.v time: fix more panics in the supported specifiers in Time.custom_format/1 (#24988) 2025-07-27 20:34:11 +03:00
date_time_parser.v fmt: fix alignment of struct init fields (#22025) 2024-08-11 09:11:24 +03:00
duration.v fmt: fix eating the attribute from @[deprecated] pub type Alias = int (fix #24968), workaround -usecache bug (#24969) 2025-07-25 10:57:52 +03:00
duration_test.v all: change single blank comment to blank line (#22016) 2024-08-09 14:55:58 +03:00
format.v time: fix more panics in the supported specifiers in Time.custom_format/1 (#24988) 2025-07-27 20:34:11 +03:00
json_decode.c.v decoder2: fix remaining json2 discrepancies (#25029) 2025-08-03 10:27:43 +03:00
operator.v time: move the nanosecond comparison before the rest in the Time == Time implementation 2025-09-05 19:28:29 +03:00
operator_test.v fmt: fix alignment of struct init fields (#22025) 2024-08-11 09:11:24 +03:00
parse.c.v parser, ast, fmt: convert "hello".str => c"hello" (fix #24635) (#24652) 2025-06-08 11:44:38 +03:00
parse.js.v time: add documentation for remaining time-related functions and ISO 8601 parsing (#23867) 2025-03-05 14:11:19 +02:00
parse.v fmt: fix alignment of struct init fields (#22025) 2024-08-11 09:11:24 +03:00
parse_test.v breaking,time: rewrite parse_rfc3339/1 to improve performance, reject partial timestamps, that miss date info like 22:47:08Z (#22585) 2024-10-21 11:24:37 +03:00
README.md fmt: fix alignment of struct init fields (#22025) 2024-08-11 09:11:24 +03:00
relative_test.v time: relative update (#14240) 2022-05-01 10:47:05 +03:00
stopwatch.v docs: check vlib/time too in the report-missing-dots-in-doc-comments job 2025-07-21 18:43:40 +03:00
stopwatch_test.v all: change single blank comment to blank line (#22016) 2024-08-09 14:55:58 +03:00
time.c.v docs: check vlib/time too in the report-missing-dots-in-doc-comments job 2025-07-21 18:43:40 +03:00
time.js.v time: add documentation for remaining time-related functions and ISO 8601 parsing (#23867) 2025-03-05 14:11:19 +02:00
time.v time: always return utc() timezone for Time.unix/0 (fix #17784) (#25233) 2025-09-05 00:22:52 +03:00
time_addition_test.v time: store time with nanosecond resolution in time.Time, deprecate Time.microsecond, add utility methods and tests (#19062) 2023-08-05 23:41:23 +03:00
time_darwin.c.v fmt: remove the prefixed module name of const names, that are in the same module (related #22183) (#22185) 2024-09-10 11:25:56 +03:00
time_format_test.v time: always return utc() timezone for Time.unix/0 (fix #17784) (#25233) 2025-09-05 00:22:52 +03:00
time_js.js.v time: update doc comments (#18947) 2023-07-22 21:30:36 +03:00
time_linux.c.v time: reduce the diff for v run cmd/tools/check_os_api_parity time 2023-07-31 11:02:10 +03:00
time_nix.c.v time: fix C.clock_gettime return type (fix #8843) (#22551) 2024-10-17 20:57:59 +03:00
time_solaris.c.v time: store time with nanosecond resolution in time.Time, deprecate Time.microsecond, add utility methods and tests (#19062) 2023-08-05 23:41:23 +03:00
time_test.c.v time: always return utc() timezone for Time.unix/0 (fix #17784) (#25233) 2025-09-05 00:22:52 +03:00
time_test.v time: always return utc() timezone for Time.unix/0 (fix #17784) (#25233) 2025-09-05 00:22:52 +03:00
time_windows.c.v docs: check vlib/time too in the report-missing-dots-in-doc-comments job 2025-07-21 18:43:40 +03:00
unix.v docs: check vlib/time too in the report-missing-dots-in-doc-comments job 2025-07-21 18:43:40 +03:00
unix_test.v time: add module helpers unix_milli/1, unix_micro/1, unix_nano/1 and tests for them (#22997) 2024-11-28 12:47:05 +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
	nanosecond: 123456789
}

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()
assert '1980-07-11 21:23:42.123456789' == time_to_test.format_ss_nano()

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')
}