time.Now în Go

Returnează momentul curent, în fusul orar local, cu o citire a ceasului monoton pentru măsurarea duratelor.

Sintaxă
func Now() Time

Ce face time.Now

time.Now() citește ceasul calculatorului și returnează un time.Time cu data și ora de acum, în fusul orar local (time.Local). Pe un server care rulează în UTC, ora va fi UTC; pentru ora României convertește cu t.In(loc).

Pe lângă ora obișnuită (ceasul „de perete”), valoarea conține și o citire a ceasului monoton, un contor care doar crește și nu sare când se schimbă ora sistemului (sincronizare NTP, schimbarea manuală a orei). Când scazi două momente obținute cu Now (Sub, time.Since), Go folosește ceasul monoton, deci durata este corectă. La afișare citirea apare la final ca m=+0.000041; t.Round(0) o elimină.

Pentru că rezultatul se schimbă la fiecare rulare, codul care depinde de Now este greu de testat. O soluție obișnuită este să primești momentul ca parametru (func raport(acum time.Time)) și să apelezi Now doar în main.

Ce returnează

Momentul curent (time.Time).

Exemple

Exemplul 1: Ora curentă și componentele ei

Rezultatul diferă la fiecare rulare.

package main

import (
	"fmt"
	"time"
)

func main() {
	acum := time.Now()
	fmt.Println(acum)
	fmt.Println(acum.Format("02.01.2006 15:04:05"))
	fmt.Println("Anul:", acum.Year(), "- ziua:", acum.Weekday(), "- fusul:", acum.Location())
	fmt.Println("Fără ceasul monoton:", acum.Round(0))
}

Rezultat posibil (diferă la fiecare rulare)

2026-10-19 14:07:31.524318 +0300 EEST m=+0.000041251
19.10.2026 14:07:31
Anul: 2026 - ziua: Monday - fusul: Local
Fără ceasul monoton: 2026-10-19 14:07:31.524318 +0300 EEST

Exemplul 2: Fapte stabile despre momentul curent

Afișăm doar comparații care sunt adevărate la orice rulare: momentul curent este după o dată din trecut, iar două citiri succesive nu merg înapoi.

package main

import (
	"fmt"
	"time"
)

func main() {
	lansare := time.Date(2026, time.January, 1, 0, 0, 0, 0, time.UTC)
	a := time.Now()
	b := time.Now()

	fmt.Println("Suntem după 1 ianuarie 2026:", a.After(lansare))
	fmt.Println("A doua citire nu e înaintea primei:", !b.Before(a))
	fmt.Println("Diferența este mică:", b.Sub(a) < time.Second)
	fmt.Println("Fusul orar al lui Now:", a.Location())
}

Rezultat

Suntem după 1 ianuarie 2026: true
A doua citire nu e înaintea primei: true
Diferența este mică: true
Fusul orar al lui Now: Local

Exemplul 3: Momentul curent primit ca parametru

Funcția salut nu apelează Now, deci poate fi verificată cu orice oră fixă.

package main

import (
	"fmt"
	"time"
)

func salut(acum time.Time) string {
	switch h := acum.Hour(); {
	case h < 12:
		return "Bună dimineața"
	case h < 18:
		return "Bună ziua"
	}
	return "Bună seara"
}

func main() {
	for _, ora := range []int{7, 13, 20} {
		fmt.Printf("%02d:00 -> %s\n", ora, salut(time.Date(2026, 10, 19, ora, 0, 0, 0, time.UTC)))
	}
	_ = salut(time.Now()) // în program: ora reală
}

Rezultat

07:00 -> Bună dimineața
13:00 -> Bună ziua
20:00 -> Bună seara

Greșeli frecvente

  • Măsori durate cu time.Now().Unix() scăzute ca numere: pierzi ceasul monoton și precizia. Scade momentele direct (time.Since(start)).
  • Compari ieșirea lui fmt.Println(time.Now()) sau o salvezi ca text: conține m=+.... Formatează cu Format sau elimină citirea cu Round(0).
  • Presupui că Now dă ora României pe server. Serverele sunt de obicei în UTC; folosește time.LoadLocation("Europe/Bucharest") și In.

Comenzi înrudite

  • time.Since: Since: cât timp a trecut de la t până acum; Until: cât timp mai este până la t. Ambele returnează time.Duration.
  • time.Date: Construiește un moment din an, lună, zi, oră, minut, secundă, nanosecundă și fus orar; normalizează valorile prea mari.
  • time.Time: Tipul care ține un moment în timp: dată, oră, nanosecunde și fusul orar. Se creează cu time.Date sau time.Now.
  • time.Time.Format: Transformă un moment în text după un model scris cu data de referință 2 ianuarie 2006, 15:04:05.
  • time.Time.In: Afișează același moment în alt fus orar: In(loc) pentru o zonă anume, UTC() pentru UTC, Local() pentru zona calculatorului.