Go 언어~번외편(시간의 처리법)을 열심히 배웠습니다~

16399 단어 Go

입문


안녕하세요.나는 모 학교에서 프로그래밍 등을 배우는 서버 분야의 프로그래머다
그럼 이번에는'Go언어 열심히 배웠어요~번외편~'으로 Go에서의 시간 처리 방법을 얘기해 보겠습니다.
앞으로 어떤 단락이 떠오르면 "Go 언어 열심히 배웠어요~ 번외편~"이라는 제목으로 TIPS 느낌으로 쓰세요.

포장


"time"패키지를 사용합니다.

현재 시간 가져오기


time.go
package main

import "fmt"
import "time"

func main() {
    t := time.Now()
    fmt.Println(t)           // => "2015-05-05 07:23:30.757800829 +0900 JST"
    fmt.Println(t.Year())    // => "2015"
    fmt.Println(t.Month())   // => "May"
    fmt.Println(t.Day())     // => "5"
    fmt.Println(t.Hour())    // => "7"
    fmt.Println(t.Minute())  // => "23"
    fmt.Println(t.Second())  // => "30"
    fmt.Println(t.Weekday()) // => "Tuesday"
}

시간 객체 만들기


초 후에는 나노 2위 지정을 잊어버리기 쉬우니 주의해야 한다.
time.go
package main

import "fmt"
import "time"

func main() {
    t := time.Date(2001, 5, 20, 23, 59, 59, 0, time.UTC)
    fmt.Println(t) // => "2001-05-20 23:59:59 +0000 UTC"
    t = time.Date(2001, 5, 20, 23, 59, 59, 0, time.Local)
    fmt.Println(t) // => "2001-05-20 23:59:59 +0900 JST"
}

시간 처리 형식


time.go
package main

import (
    "fmt"
    "time"
)

func main()  {

    day := time.Now()
    //"2006年1月2日15時04分05秒"以外の時刻は正しいフォーマット文字列としては認識されない。
    const layout = "2006-01-02 15:04:05"
    fmt.Println(day.Format(layout))// => "2018-10-31 17:57:54"
}
여기서 의문은 왜 "2006-01-0215:04:05"가 격식입니까?
그것은 미국식 시간의 순서다.'1월 2일 오후 3시 4분 5초 2006년'(즉'자연순서'는 1, 2, 3, 4, 5, 6)을 가리킨다.Go 개발자 Rob Pike는 golang-nuts 메일 리스트에서 처음부터 꼼꼼히 고려했다면 이 순서대로 하지 않았을 것이라고 말했다. (영어권에서 영국이라면 다른 순서였지만) 이미 순서였기 때문에 바꿀 수 없었고 글도 잘 썼다.그래서 단순히 그렇다고 생각할 수밖에 없어요.

TIPS


그렇다면 얻기 어려운 기회이기 때문에 이럴 때 어떤 처리를 해야 할지 기술해야 한다.

지정된 날짜가 있는지 확인


time.go
package main

import "fmt"
import "time"

func main() {
    jd, err := isExist(2001, 1, 31)
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(int(jd))
    }
    // => "2451940"
    jd, err = isExist(2001, 1, 32)
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Println(int(jd))
    }
    // => "2001-1-32 is not exist"
}

// 指定の日付が存在するかどうか調べる。
// 存在しない日付を指定してもtime.Date()はよきに計らってくれるので、
// 指定した日付と違うtime.Timeが返ってくれば指定した日付が間違ってると判定。
func isExist(year, month, day int) (float64, error) {
    date := time.Date(year, time.Month(month), day, 0, 0, 0, 0, time.Local)
    if date.Year() == year && date.Month() == time.Month(month) && date.Day() == day {
        return Julian(date), nil
    } else {
        return 0, fmt.Errorf("%d-%d-%d is not exist", year, month, day)
    }
}

// ユリウス日を求める
func Julian(t time.Time) float64 {
    // Julian date, in seconds, of the "Format" standard time.
    // (See http://www.onlineconversion.com/julian_date.htm)
    const julian = 2453738.4195
    // Easiest way to get the time.Time of the Unix time.
    // (See comments for the UnixDate in package Time.)
    unix := time.Unix(1136239445, 0)
    const oneDay = float64(86400. * time.Second)
    return julian + float64(t.Sub(unix))/oneDay
}

며칠 후, 며칠 전의 날짜를 구하다


AddDate를 사용할 수 있습니다.매개 변수는 year,month,day 순이다.
time.go
package main

import "fmt"
import "time"

func main() {
    t := time.Date(2001, 5, 31, 0, 0, 0, 0, time.Local)
    t = t.AddDate(0, 0, 1)
    fmt.Println(t) // => "2001-06-01 00:00:00 +0900 JST"

    t = time.Date(2001, 1, 1, 0, 0, 0, 0, time.Local)
    t = t.AddDate(0, 0, -1)
    fmt.Println(t) // => "2000-12-31 00:00:00 +0900 JST"
}
이상
무슨 잘못이 있으면 연락 주세요.
끝까지 읽어줘서 고마워요.
이번에 나는 이 보도를 참고했다 .

좋은 웹페이지 즐겨찾기