Pular para o conteúdo

27 · Biblioteca Padrão

Data e Hora (std::datetime)

Obtém o instante atual, formata e analisa datas, e realiza aritmética de calendário com std::datetime.

Nesta página

std::datetime fornece acesso ao instante atual do sistema, conversão entre timestamps Unix e representações de calendário, formatação e análise de strings de data, e aritmética simples de dias e horas.

Todos os exemplos abaixo requerem o host e não podem ser executados no sandbox WASM do navegador; rode-os com a CLI do Zolo.


Instante atual

datetime.now() retorna um objeto com os campos year, month, day, hour, minute, second, millisecond e timestamp (segundos Unix como float). O módulo também oferece predicados de calendário:

Lê os campos do instante atual e demonstra is_leap_year / days_in_month.

01-now.zolo
Playground
// Feature: datetime.now — current instant
// When to use: timestamps for logs, time measurement, metadata.

use std::datetime

let now = datetime.now()

// Expected fields:
//   year, month, day, hour, minute, second, millisecond, timestamp.
print(now.year >= 2024)  // expected: true
print(now.month >= 1 && now.month <= 12)  // expected: true
print(now.day >= 1 && now.day <= 31)  // expected: true
print(now.hour >= 0 && now.hour <= 23)  // expected: true
print(now.timestamp > 0.0)  // expected: true

// Useful: extract just the year for a log header.
print("current year: {now.year}")

// is_leap_year — predicate.
print(datetime.is_leap_year(2024))  // expected: true
print(datetime.is_leap_year(2023))  // expected: false

// days_in_month.
print(datetime.days_in_month(2024, 2))  // expected: 29
print(datetime.days_in_month(2023, 2))  // expected: 28
print(datetime.days_in_month(2024, 7))  // expected: 31

Requer a CLI/host do Zolo — abra no playground ou rode localmente.


Formatação

datetime.to_iso produz uma string ISO-8601 UTC; datetime.format aceita códigos %Y %m %d %H %M %S para saídas personalizadas. Use datetime.from_timestamp(seconds) para criar um objeto a partir de um timestamp estático e obter resultados determinísticos:

Converte o epoch Unix em strings legíveis com to_iso e format.

02-format.zolo
Playground
// Feature: datetime.format / datetime.to_iso — formatting dates
// When to use: produce human-readable or serializable strings (ISO-8601).

use std::datetime

// from_timestamp gives a stable, deterministic value.
// 0 = 1970-01-01T00:00:00Z (epoch).
let epoch = datetime.from_timestamp(0)

// to_iso — produces an ISO-8601 UTC string.
let iso = datetime.to_iso(epoch)
print(iso.starts_with("1970-01-01"))  // expected: true

// format — uses codes: %Y (year), %m (month), %d (day),
// %H (hour), %M (min), %S (sec).
print(datetime.format(epoch, "%Y-%m-%d"))  // expected: 1970-01-01
print(datetime.format(epoch, "%H:%M:%S"))  // expected: 00:00:00

// to_iso also accepts a numeric timestamp directly.
print(datetime.to_iso(0).starts_with("1970"))  // expected: true

Requer a CLI/host do Zolo — abra no playground ou rode localmente.


Análise e aritmética

datetime.parse detecta o formato automaticamente e retorna (data, nil) no sucesso ou (nil, mensagem) para uma entrada inválida em todos os backends host; datetime.from_timestamp converte um número de segundos. add_days e add_hours operam sobre timestamps (retornam um novo timestamp Int) — re-envolva com from_timestamp para ler os campos de calendário:

Analisa "2024-06-15", avança 3 dias e 5 horas com aritmética de timestamp.

03-parse.zolo
Playground
// Feature: datetime.parse / datetime.from_timestamp — input

// When to use: read dates coming from logs, configs, APIs.


use std::datetime

// from_timestamp — takes seconds since epoch.

let dt = datetime.from_timestamp(1700000000)
print(dt.year == 2023)  // expected: true


// parse — format is auto-detected by default.

let parsed = datetime.parse("2024-06-15")
print(parsed.year)  // expected: 2024

print(parsed.month)  // expected: 6

print(parsed.day)  // expected: 15


// Force the ISO grammar at an API boundary. This is a domain operation,

// never a cast from `str`.

let parsed_iso = datetime.parse("2024-06-15T12:30:00Z", "iso")
print(datetime.to_iso(parsed_iso))  // expected: 2024-06-15T12:30:00Z


// add_days — calendar arithmetic. NOTE: add_days/add_hours operate

// on timestamps (Int seconds since epoch) and return a timestamp;

// re-wrap with from_timestamp to read calendar fields.

let plus3_ts = datetime.add_days(parsed.timestamp, 3)
let plus3    = datetime.from_timestamp(plus3_ts)
print(plus3.day)  // expected: 18


// add_hours.

let plus5h_ts = datetime.add_hours(parsed.timestamp, 5)
let plus5h    = datetime.from_timestamp(plus5h_ts)
print(plus5h.hour)  // expected: 5

Requer a CLI/host do Zolo — abra no playground ou rode localmente.

Índice global

Encontre seu caminho pela Zolo

Experimente uma ideia

Comece por aqui

9 resultados

9 resultados

enespt-br