Дата форматирования в массиве внутри структуры

# #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 и т. Д.).