1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

time: add more UTC/local time conversion functions, make Time.format_rfc3339 more stable

This commit is contained in:
Delyan Angelov
2022-12-11 13:32:40 +02:00
parent 73e886eafe
commit ad24c22250
3 changed files with 97 additions and 1 deletions

View File

@@ -401,3 +401,51 @@ pub fn offset() int {
local := t.local()
return int(local.unix - t.unix)
}
// local_to_utc converts the receiver `t` to the corresponding UTC time, if it contains local time.
// If the receiver already does contain UTC time, it returns it unchanged.
pub fn (t Time) local_to_utc() Time {
if !t.is_local {
return t
}
return Time{
...t.add(-offset() * time.second)
is_local: false
}
}
// utc_to_local converts the receiver `u` to the corresponding local time, if it contains UTC time.
// If the receiver already does contain local time, it returns it unchanged.
pub fn (u Time) utc_to_local() Time {
if u.is_local {
return u
}
return Time{
...u.add(offset() * time.second)
is_local: true
}
}
// as_local returns the exact same time, as the receiver `t`, but with its .is_local field set to true.
// See also #Time.utc_to_local .
pub fn (t Time) as_local() Time {
return Time{
...t
is_local: true
}
}
// as_utc returns the exact same time, as the receiver `t`, but with its .is_local field set to false.
// See also #Time.local_to_utc .
pub fn (t Time) as_utc() Time {
return Time{
...t
is_local: false
}
}
// is_utc returns true, when the receiver `t` is a UTC time, and false otherwise.
// See also #Time.utc_to_local .
pub fn (t Time) is_utc() bool {
return !t.is_local
}