GOLANG에서 시간을 구문 분석하는 방법은 SQL과 함께 작동합니다.

이 게시물에서는 Golang(time.Time) 및 SQL 연결을 사용하여 현지 시간대를 처리하는 방법에 대해 설명합니다.



문제 :
나는 로그에 대해 createdDate 및 updatedDate와 함께 일부 정보를 포함하는 SQL DB에 데이터를 삽입하기 위한 API를 작성했습니다.
그러나 프런트 엔드에서 날짜를 삽입하면 날짜가 현재 날짜보다 5시간 앞당겨집니다.

솔루션 이전 코드 및 출력:-


SQLConnection.go



func DbConn() (db *sql.DB) {

    db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/new_lms")
    if err != nil {
        panic(err.Error())
    }
    return db
}


menuInsertDAO.go


//AddMenuService for insert menu
func AddMenuService(menu Menu) error {
    fmt.Println("add menu", menu.MenuId)
    db := helper.DbConn()
    menuDate := time.Now().UTC()
    fmt.Println("menuDate", menuDate, reflect.TypeOf(menuDate))
    menuData, err := db.Prepare("INSERT INTO mmenus(pkMenuId, menuName, routerLink, description, createdOn,createdBy) VALUES(?,?, ?,?,?,?)")
    if err != nil {
        panic(err.Error())

    }
    menuData.Exec(menu.MenuId, menu.MenuName, menu.RouterLink, menu.Description, menuDate, menu.CreatedBy)
    return nil
}


산출:

Backend O/P: menuDate 2021-01-04 11:45:12.6202467 +0530 IST m=+165.534486801 time.Time
SQLDB :




이제 솔루션으로 이동합니다.


1) 백엔드에서 일어나는 일 🤔

그것은 "벽시계"와 비슷합니다.
예를 들어 인도인에게 날짜와 시간을 물으면 그는 단순히 2021년 1월 4일 03:08:12라고 대답하고 동시에 다른 나라 사람은 (뉴욕: 2021년 1월 4일)과 같이 다른 시간으로 대답합니다. 04:40:21).
여기서 위치는 표시 목적으로만 사용되며 시간의 실제 값을 변경하지 않습니다. 기본적으로 위치는 시스템의 현지 시간대를 기반으로 합니다.


2)Golang에서 SQL 연결로 이동해 보겠습니다.

Golang에서 SQL 연결을 사용할 때 SQL 데이터베이스의 시간대를 이해해야 합니다.
MySQL은 두 개의 시간대를 사용했습니다.
1)MySQL 서버가 사용할 로컬 시스템의 시간대입니다.
2) 시간대 연결 자체.


SQL 연결:

SQL 연결을 사용하면 값을 구문 분석할 수 있습니다. 우리의 경우time.Now()는 로컬 시스템의 현재 시간을 반환하고 SQL 연결은 이를 전역 시간으로 받아들입니다.
이 문제는 위치별로 날짜를 구문 분석하여 해결됩니다.

db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/new_lms?parseTime=true&loc=Asia%2FCalcutta")


참고:- %2F: '/'는 %2F로 대체됩니다.


menuInsertDAO.go



//AddMenuService for insert menu
func AddMenuService(menu Menu) error {
    fmt.Println("add menu", menu.MenuId)
    db := helper.DbConn()
    menuDate := time.Now().UTC()
    fmt.Println("menuDate", menuDate, reflect.TypeOf(menuDate))
    menuData, err := db.Prepare("INSERT INTO mmenus(pkMenuId, menuName, routerLink, description, createdOn,createdBy) VALUES(?,?, ?,?,?,?)")
    if err != nil {
        panic(err.Error())
        // return err
    }
    menuData.Exec(menu.MenuId, menu.MenuName, menu.RouterLink, menu.Description, menuDate, menu.CreatedBy)
    return nil
}


After parsing the time the output is:-
Back-end :
menuDate 2021-01-04 15:50:02.2094272 +0530 IST m=+58.177726101 time.Time
SQLDB:



이것은 내 첫 번째 게시물이며 다른 솔루션과 제안을 수락합니다.
읽어 주셔서 감사합니다.

좋은 웹페이지 즐겨찾기