Date Time
Various operators for parsing and manipulating dates.
Date time formattings
This uses Golang's built in time library for parsing and formatting date times.
When not specified, the RFC3339 standard is assumed 2006-01-02T15:04:05Z07:00 for parsing.
To specify a custom parsing format, use the with_dtf operator. The first parameter sets the datetime parsing format for the expression in the second parameter. The expression can be any valid yq expression tree.
yq 'with_dtf("myformat"; .a + "3h" | tz("Australia/Melbourne"))'See the library docs for examples of formatting options.
Timezones
This uses Golang's built in LoadLocation function to parse timezones strings. See the library docs for more details.
Durations
Durations are parsed using Golang's built in ParseDuration function.
You can add durations to time using the + operator.
Format: from standard RFC3339 format
Providing a single parameter assumes a standard RFC3339 datetime format. If the target format is not a valid yaml datetime format, the result will be a string tagged node.
Given a sample.yml file of:
a: 2001-12-15T02:59:43.1Zthen
yq '.a |= format_datetime("Monday, 02-Jan-06 at 3:04PM")' sample.ymlwill output
a: Saturday, 15-Dec-01 at 2:59AMFormat: from custom date time
Use with_dtf to set a custom datetime format for parsing.
Given a sample.yml file of:
a: Saturday, 15-Dec-01 at 2:59AMthen
yq '.a |= with_dtf("Monday, 02-Jan-06 at 3:04PM"; format_datetime("2006-01-02"))' sample.ymlwill output
a: 2001-12-15Format: get the day of the week
Given a sample.yml file of:
a: 2001-12-15then
yq '.a | format_datetime("Monday")' sample.ymlwill output
SaturdayNow
Given a sample.yml file of:
a: coolthen
yq '.updated = now' sample.ymlwill output
a: cool
updated: 2021-05-19T01:02:03ZFrom Unix
Converts from unix time. Note, you don't have to pipe through the tz operator :)
Running
yq --null-input '1675301929 | from_unix | tz("UTC")'will output
2023-02-02T01:38:49ZTo Unix
Converts to unix time
Running
yq --null-input 'now | to_unix'will output
1621386123Timezone: from standard RFC3339 format
Returns a new datetime in the specified timezone. Specify standard IANA Time Zone format or 'utc', 'local'. When given a single parameter, this assumes the datetime is in RFC3339 format.
Given a sample.yml file of:
a: coolthen
yq '.updated = (now | tz("Australia/Sydney"))' sample.ymlwill output
a: cool
updated: 2021-05-19T11:02:03+10:00Timezone: with custom format
Specify standard IANA Time Zone format or 'utc', 'local'
Given a sample.yml file of:
a: Saturday, 15-Dec-01 at 2:59AM GMTthen
yq '.a |= with_dtf("Monday, 02-Jan-06 at 3:04PM MST"; tz("Australia/Sydney"))' sample.ymlwill output
a: Saturday, 15-Dec-01 at 1:59PM AEDTAdd and tz custom format
Specify standard IANA Time Zone format or 'utc', 'local'
Given a sample.yml file of:
a: Saturday, 15-Dec-01 at 2:59AM GMTthen
yq '.a |= with_dtf("Monday, 02-Jan-06 at 3:04PM MST"; tz("Australia/Sydney"))' sample.ymlwill output
a: Saturday, 15-Dec-01 at 1:59PM AEDTDate addition
Given a sample.yml file of:
a: 2021-01-01T00:00:00Zthen
yq '.a += "3h10m"' sample.ymlwill output
a: 2021-01-01T03:10:00ZDate subtraction
You can subtract durations from dates. Assumes RFC3339 date time format, see date-time operators for more information.
Given a sample.yml file of:
a: 2021-01-01T03:10:00Zthen
yq '.a -= "3h10m"' sample.ymlwill output
a: 2021-01-01T00:00:00ZDate addition - custom format
Given a sample.yml file of:
a: Saturday, 15-Dec-01 at 2:59AM GMTthen
yq 'with_dtf("Monday, 02-Jan-06 at 3:04PM MST"; .a += "3h1m")' sample.ymlwill output
a: Saturday, 15-Dec-01 at 6:00AM GMTDate script with custom format
You can embed full expressions in with_dtf if needed.
Given a sample.yml file of:
a: Saturday, 15-Dec-01 at 2:59AM GMTthen
yq 'with_dtf("Monday, 02-Jan-06 at 3:04PM MST"; .a = (.a + "3h1m" | tz("Australia/Perth")))' sample.ymlwill output
a: Saturday, 15-Dec-01 at 2:00PM AWSTLast updated
Was this helpful?