# #date #go #struct #formatting #format
Вопрос:
Я хочу убедиться, что DOB(Дата рождения) отформатирован профессионально и четко, а не является простым целым числом. Я попытался использовать константу для объявления макета следующим образом
const (
layoutISO = "2006-01-02"
layoutUS = "January 2, 2006"
)
date := "1999-12-31"
t, _ := time.Parse(layoutISO, date)
fmt.Println(t) // 1999-12-31 00:00:00 0000 UTC
fmt.Println(t.Format(layoutUS)) // December 31, 1999
но я, кажется, не могу вписать это в свой контекст
package main
import (
"fmt"
)
func main() {
const (
layoutISO = "2006-01-02"
layoutUS = "January 2, 2006"
)
type aUser struct {
userID int
username string
email string
DOB int64
registeredAt int64
}
type note struct {
name string
status string
users []aUser
}
sally := aUser{01, "Sally", "sally@gmail.com", 112498, 1935}
john := aUser{02, "John", "johnme@gmail.com", 112388, 1978}
users := []aUser{sally, john}
notes := note{"Grocery List", "Completed", users}
fmt.Printf("notes are %vn", notes)
}
Комментарии:
1. Это кажется странным выбором дизайна для представления DOBs с использованием одного целого числа, состоящего из 3 других целых чисел MDY. Если вы можете это исправить, вы должны это сделать.
2. используйте t.Unix (), чтобы получить метку времени в качестве значения int64.
Ответ №1:
Вы можете извлечь год/месяц/дату из числового типа с помощью операций деления и по модулю, а затем записать их в строку, используя форматирование строк в стиле C с fmt.Sprintf()
помощью .
var dob uint64 = 112498
date := fmt.Sprintf("19d-d-d", dob % 100, dob / 10000, (dob / 100) % 100)
fmt.Println(date) // 1998-11-24
Имейте в виду, что в вашем формате даты отсутствует информация о столетии и тысячелетии, поэтому в приведенном выше коде я предположил, что год 19XX (в отличие от 20XX и т. Д.).