Time
Reading the clock, working with dates, and formatting a moment as text.
Fifteen pure nodes for reading the current time and working with dates. Now reads the clock. Make Time and Get Time Parts convert between a moment and its calendar fields. Add Time and Time Difference perform arithmetic that accounts for the length of each month. Four formatters turn a moment into text.
The common use is a save screen. To show when a slot was written, take Get Save Time into one of the formatters here.
Conventions
- Every node on this page is
Pure. None of them has an exec pin. Each is legal inevent,functionandmacrographs, and inside a Blueprint Value. A save slot's label is a Blueprint Value. - A moment is a number: milliseconds since 1 January 1970 UTC, on a
floatpin. This is the unitGet Save TimeandGet Latest Auto Saveproduce, so a save's stamp wires straight into any node here. - There is no Time comparison node. A later moment is a larger number, so
<,>,MinandMaxin Math already order two moments. - The calendar is the player's local one.
Make Time,Get Time Parts,Add Time,Time Difference,Start Of Day,Is Same DayandFormat Timeall read local time.To ISO Stringis the exception and outputs UTC. - Nothing is cached. A node runs again on every read, so
Nowgives a different answer to each edge that reads it. - A pin that is not a usable number reads as
0, meaning 1 January 1970.Format Timeprints that date and reports nothing, so a formatter showing 1970 is reading an input that never arrived.
Now
blueprint.time.now · Pure
The current time.
| Pin | Direction | Type | Notes |
|---|---|---|---|
timestamp | out · data | float |
Make Time
blueprint.time.make · Pure
Builds a moment from local calendar fields.
| Pin | Direction | Type | Notes |
|---|---|---|---|
year | in · data | integer | Accepts an on-card literal. 50 means the year 50, not 1950. |
month | in · data | integer | 1–12. Accepts an on-card literal. |
day | in · data | integer | 1–31. Accepts an on-card literal. |
hour | in · data | integer | 0–23. Accepts an on-card literal. |
minute | in · data | integer | 0–59. Accepts an on-card literal. |
second | in · data | integer | 0–59. Accepts an on-card literal. |
millisecond | in · data | integer | 0–999. Accepts an on-card literal. |
timestamp | out · data | float |
A field outside its range carries into the next one. month 13 is January of the following year. day 0 is the last day of the previous month. Use it to reach the end of a month.
Get Time Parts
blueprint.time.parts · Pure
Splits a moment into local calendar fields.
| Pin | Direction | Type | Notes |
|---|---|---|---|
timestamp | in · data | float | Accepts an on-card literal. |
year | out · data | integer | |
month | out · data | integer | 1–12. |
day | out · data | integer | 1–31. |
hour | out · data | integer | 0–23. |
minute | out · data | integer | 0–59. |
second | out · data | integer | 0–59. |
millisecond | out · data | integer | 0–999. |
weekday | out · data | integer | 0 is Sunday, 6 is Saturday. |
dayOfYear | out · data | integer | 1 on 1 January. |
Format Time
blueprint.time.format · Pure
Renders a moment as text using a pattern.
| Pin | Direction | Type | Notes |
|---|---|---|---|
timestamp | in · data | float | Accepts an on-card literal. |
pattern | in · data | string | Accepts an on-card literal. YYYY-MM-DD HH:mm when left empty. |
result | out · data | string |
| Token | Produces | Example |
|---|---|---|
YYYY | Four-digit year | 2026 |
YY | Two-digit year | 26 |
MM / M | Month, padded or not | 08 / 8 |
DD / D | Day, padded or not | 04 / 4 |
HH / H | Hour, 24-hour, padded or not | 15 / 15 |
hh / h | Hour, 12-hour, padded or not | 03 / 3 |
mm / m | Minute, padded or not | 30 / 30 |
ss / s | Second, padded or not | 05 / 5 |
SSS | Millisecond | 007 |
A / a | Half of the day | PM / pm |
Anything that is not a token is copied through. Text between single quotes is copied through without being scanned for tokens, so a letter that is also a token can still be printed: 'Day' D gives Day 14. Two single quotes in a row print one quote.
Format Time Localized
blueprint.time.formatLocalized · Pure
Renders a moment in the conventions of a language.
| Pin | Direction | Type | Notes |
|---|---|---|---|
timestamp | in · data | float | Accepts an on-card literal. |
locale | in · data | string | Accepts an on-card literal. A BCP 47 tag such as en-US or zh-CN. Empty means the player's system language. |
result | out · data | string |
On-card fields
| Field | What |
|---|---|
Date Style | None, Short, Medium, Long or Full. Defaults to Medium. |
Time Style | The same five. Defaults to None. |
With both styles set to None the result is empty. A tag the system does not recognise falls back to the player's language.
This node does not read the game's current language. Wire Get Current Language into locale to make the date follow the language the player selected.
Format Relative Time
blueprint.time.formatRelative · Pure
Describes the gap between two moments in words: 5 minutes ago, in 2 days.
| Pin | Direction | Type | Notes |
|---|---|---|---|
from | in · data | float | Accepts an on-card literal. The reference point, usually Now. |
to | in · data | float | Accepts an on-card literal. The moment being described. |
locale | in · data | string | Accepts an on-card literal. As in Format Time Localized. |
result | out · data | string |
On-card fields
| Field | What |
|---|---|
Wording | Auto lets the language use words like yesterday. Always Numeric always counts. Defaults to Auto. |
The unit follows the size of the gap: seconds below a minute, then minutes, hours, days, months, years.
Format Duration
blueprint.time.formatDuration · Pure
Renders a length of time as a clock reading.
| Pin | Direction | Type | Notes |
|---|---|---|---|
milliseconds | in · data | float | Accepts an on-card literal. |
result | out · data | string |
On-card fields
| Field | What |
|---|---|
Layout | Auto shows hours only when there are any (1:05, 2:03:04). Hours Minutes Seconds always shows them (00:01:05). Minutes Seconds never does (01:05). Defaults to Auto. |
Hours keep accumulating rather than rolling into days: thirty hours of play time reads 30:00:00.
The output is digits and separators. A wording such as 1 h 20 min needs a translation, so build it from Get Duration Parts and Format Text.
Get Duration Parts
blueprint.time.durationParts · Pure
Splits a length of time into units.
| Pin | Direction | Type | Notes |
|---|---|---|---|
milliseconds | in · data | float | Accepts an on-card literal. |
days | out · data | integer | |
hours | out · data | integer | 0–23. |
minutes | out · data | integer | 0–59. |
seconds | out · data | integer | 0–59. |
remainingMilliseconds | out · data | integer | 0–999. |
totalHours | out · data | integer | The whole span in hours. |
totalMinutes | out · data | integer | The whole span in minutes. |
totalSeconds | out · data | integer | The whole span in seconds. |
negative | out · data | boolean |
Every number is a magnitude. The sign is reported by negative.
Add Time
blueprint.time.add · Pure
Moves a moment forward or back.
| Pin | Direction | Type | Notes |
|---|---|---|---|
timestamp | in · data | float | Accepts an on-card literal. |
amount | in · data | float | Accepts an on-card literal. Negative moves back. |
result | out · data | float |
On-card fields
| Field | What |
|---|---|
Unit | Milliseconds, Seconds, Minutes, Hours, Days, Weeks, Months or Years. Defaults to Seconds. |
Months and Years go through the calendar and stop at the end of the target month: 31 January plus one month is 28 February, or 29 in a leap year.
Time Difference
blueprint.time.difference · Pure
to minus from, measured in one unit.
| Pin | Direction | Type | Notes |
|---|---|---|---|
from | in · data | float | Accepts an on-card literal. |
to | in · data | float | Accepts an on-card literal. |
difference | out · data | float | Negative when to is earlier than from. |
On-card fields
| Field | What |
|---|---|
Unit | As in Add Time. Defaults to Seconds. |
Fixed-length units keep the fraction. Ninety minutes measured in hours is 1.5; pass it through Floor for a whole number. Months and Years count whole calendar steps, so a gap one day short of a month is 0.
Parse Time
blueprint.time.parse · Pure
Reads a written date back into a moment.
| Pin | Direction | Type | Notes |
|---|---|---|---|
value | in · data | string | Accepts an on-card literal. |
timestamp | out · data | float | 0 when the text could not be read. |
ok | out · data | boolean |
ISO 8601 is the format to write. A date with no time, such as 2026-08-14, is read as local midnight.
Check ok. A failed parse produces 0, and 0 is also a valid moment in 1970.
To ISO String
blueprint.time.toIsoString · Pure
Writes a moment as an ISO 8601 string in UTC: 2026-08-14T07:30:00.000Z. Use it to put a time into a save's metadata or a persistent variable.
| Pin | Direction | Type | Notes |
|---|---|---|---|
timestamp | in · data | float | Accepts an on-card literal. |
result | out · data | string |
Parse Time reads this back as the same moment.
Is Same Day
blueprint.time.isSameDay · Pure
Whether two moments fall on the same local calendar day.
| Pin | Direction | Type | Notes |
|---|---|---|---|
a | in · data | float | Accepts an on-card literal. |
b | in · data | float | Accepts an on-card literal. |
result | out · data | boolean |
The comparison is on the calendar day. 23:59 and 00:30 the next morning are half an hour apart and fall on different days.
Start Of Day
blueprint.time.startOfDay · Pure
Local midnight of the day a moment falls in.
| Pin | Direction | Type | Notes |
|---|---|---|---|
timestamp | in · data | float | Accepts an on-card literal. |
result | out · data | float |
Get Time Zone
blueprint.time.zoneOffset · Pure
The time zone the game is running in.
| Pin | Direction | Type | Notes |
|---|---|---|---|
timestamp | in · data | float | Accepts an on-card literal. The moment to ask about — daylight saving gives one zone different offsets through the year. |
offsetMinutes | out · data | float | Minutes ahead of UTC. 480 for UTC+8. |
name | out · data | string | An IANA name such as Asia/Shanghai. Empty when the system does not report one. |
Showing when a save was written
A slot's label is a Blueprint Value, and Get Save Time supplies the moment:
- An absolute date —
Get Save Time→savedAt→Format Time, orFormat Time Localizedto follow the player's language. - A relative date —
Nowintofrom,savedAtintoto, thenFormat Relative Time. - Grouping by day — compare
Start Of Dayof the save againstStart Of DayofNow, or useIs Same Day.
Read Get Save Time's exists pin to identify an empty slot. Its savedAt is 0 when there is no save, and 0 is also a valid moment.