Отримати поточний час як відформатований рядок у Go?


Відповіді:


149

Використовуйте time.Now()функцію та time.Format()метод.

t := time.Now()
fmt.Println(t.Format("20060102150405"))

роздруковує 20110504111515або, принаймні, це робилося кілька хвилин тому. (Я в східний літній час.) У константах, визначених у часовому пакеті, є кілька заздалегідь визначених форматів часу.

Ви можете використовувати, time.Now().UTC()якщо ви хочете мати UTC, ніж ваш місцевий часовий пояс.


15
Мені точно подобається Kitchenконстанта ( = "3:04PM")
tux21b

5
Дякую за цю інформацію. Звідки пакет часу знає про проходження "20060102150405", саме те, що ми проходимо, оскільки він не є однією із заздалегідь визначених констант у часовому пакеті? Яке значення цієї дати та часу у пакеті часу (20060102150405)? Мені це здається трохи химерним, але поки він працює, я вважаю, що це не має значення, доки ми не помилимось при його кодуванні. Я думаю, вони не вважають за потрібне надавати константу для цього формату та відповідати рядковій схемі.
бриано

9
@brianoh: Дивіться golang.org/pkg/time/#Constants Настав час "01/02 03:04:05 PM '06 -0700", оскільки кожен компонент має різне число (1, 2, 3 і т.д.), він може визначити з чисел, які компоненти ви хочете.
newacct

1
Зауважте, що time.LocalTime () більше не існує: дивіться мою відповідь нижче, щоб бути сумісною Go 1.0.3
Deleplace

71

Усі інші відповіді дуже пропускають людей, які приїжджають із Google і шукають "мітки часу в дорозі"! YYYYMMDDhhmmss не є "часовою позначкою".

Для отримання "позначки часу" дати в дорозі (кількість секунд з січня 1970 року) правильною функцією є .Unix () , і вона дійсно повертає ціле число


8
Я згоден; питання має бути названо "поточна дата", а не "поточна мітка часу"
developerbmw

1
Хоча вже пізно, я думаю. Unix () повинен вказувати на golang.org/pkg/time/#Time.Unix , тип повернення якого - int64.
народжений вільний

Хоча ви технічно правильні, я думаю, що багато кодерів сьогодні порівнюють часову позначку із "поточним часом у певному форматному форматі", так що ця назва була б однаковою заплутаною для більшості.
Роджер Хілл

Я запропонував редагувати - Get current time as formatted string in Go?. Сподіваємось, хтось це схвалить.
Акки

56

Для читабельності найкраще використовувати константи RFC у часовому пакеті (мені здається)

import "fmt" 
import "time"

func main() {
    fmt.Println(time.Now().Format(time.RFC850))
}

4
Як це виробляє YYYYMMDDhhmmss?
Прут

2
RFC850 виробляє Tuesday, 10-Nov-09 23:00:00 UTC RFC3339 = "2006-01-02T15:04:05Z07:00" play.golang.org/p/XmobwWSz5pN golang.org/pkg/time
Кріс Маккі

32

Використовуйте функції time.Now () та time.Format () (як time.LocalTime () більше не існує з Go 1.0.3)

t := time.Now()
fmt.Println(t.Format("20060102150405"))

Інтернет демо (з дати , встановленої в минулому на дитячому майданчику, ніколи не розум)


6
І ви можете використовувати його просто як струну, як це:s := "Actual time is: "+time.Now().String()
Михайло



0

https://golang.org/src/time/format.go вказано Для розбору часу 15використовується час Години, 04використовується хвилин, 05секунд.

Для розбору дати 11, Jan, Januaryце в протягом декількох місяців, 02, Mon, Mondayза день місяця, 2006за рік і, звичайно , MSTдля зони

Але ви також можете використовувати цей макет, який я вважаю дуже простим. "Mon Jan 2 15:04:05 MST 2006"

    const layout = "Mon Jan 2 15:04:05 MST 2006"
    userTimeString := "Fri Dec 6 13:05:05 CET 2019"

    t, _ := time.Parse(layout, userTimeString)
    fmt.Println("Server: ", t.Format(time.RFC850))
    //Server:  Friday, 06-Dec-19 13:05:05 CET

    mumbai, _ := time.LoadLocation("Asia/Kolkata")
    mumbaiTime := t.In(mumbai)
    fmt.Println("Mumbai: ", mumbaiTime.Format(time.RFC850))
    //Mumbai:  Friday, 06-Dec-19 18:35:05 IST

DEMO


-4

Щоб відповісти на точне запитання:

import "github.com/golang/protobuf/ptypes"

Timestamp, _ = ptypes.TimestampProto(time.Now())

Дякую Суран, це корисно, коли позначку часу потрібно надсилати через grpc
rajeshk
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.