Two setting methods: 1. Fixed time zone, syntax "var c = time.FixedZone("CST", 8*3600)" and "time.Now().In(c).Format(" Time ")"; 2. Load time zone, syntax "var c, _ = time.LoadLocation("Asia/Shanghai")" and "time.Now().In(c).Format("time")".
The operating environment of this tutorial: Windows 7 system, GO version 1.18, Dell G3 computer.
Division of time zones
The world takes Greenwich, London, England as the starting point of the zero-degree longitude, and every 15 longitudes is a time zone, 15 degrees The meridian is the central meridian of the time zone, which is divided into 24 time zones. A time zone increases every 15 degrees of longitude from west to east, and conversely, a time zone decreases every 15 degrees of longitude to the west. China's time zone is East 8.
Time format
Current timetime.Now()
Returns the time in the local time zone:
func main() { t := time.Now() fmt.Println(t) //2020-12-16 09:34:19.5828312 +0800 CST m=+0.004002201 }
CST time
CST can represent the following four different time zones:
time.Now()
The 0800 CST
returned by Conversion:
GMT + 8 = UTC + 8 = CST
Monotonic Clocks and Wall Clocks
Wall Clocks represents wall clock time and stores the time since 0:00:00 on January 1, 1970 Timestamp, when the system and timing server perform time calibration operations, it may cause this second to be 2018-1-1 00:00:00, and the next second to become 2017-12-31 23:59:59 Case.
Monotonic Clocks means monotonic time. The so-called monotonic means that it will only continue to grow forward and is not affected by the time adjustment operation. This time is the number of seconds since the process started. time.Now()
The returned m= 0.004002201
means Monotonic Clocks
Time zone setting
If the specified time zone is not set in the go language, the local time zone is obtained through time.Now()
:
func main() { t := time.Now() //返回本地时区格式 fmt.Println(t) }
The go language does not have such a global setting time zone Something, every time you output the time, you need to call an In() function to change the time zone.
There are two ways to set the time zone:
1. Fixed time zone (recommended)
var cstZone = time.FixedZone("CST", 8*3600) // 东八 fmt.Println(time.Now().In(cstZone).Format("2006-01-02 15:04:05"))
Fix the time zone to the East Eighth District. But this is not a global setting for the program. Each time you obtain it, you need to fix the time zone
2 and load the time zone
var cstSh, _ = time.LoadLocation("Asia/Shanghai") // 上海 fmt.Println(time.Now().In(cstSh).Format("2006-01-02 15:04:05"))
to load the specified time zone. But if you use this method without a go environment, the loading will fail, because the time zone information is placed in the go installation package.
If you use the second method to load the time zone, you need to configure the time zone when building the docker image. The configuration file is as follows:
FROM golang:alpine as build RUN apk --no-cache add tzdata //构建阶段加载时区 WORKDIR /app ADD . /app RUN CGO_ENABLED=0 GOOS=linux go build -o myapp FROM scratch as final COPY --from=build /app/myapp . ### 下面这行是新加的,复制时区相关的信息到最终镜像中,否则程序会找不到改时区 COPY --from=build /usr/share/zoneinfo /usr/share/zoneinfo ENV TZ=Asia/Shanghai //在最终阶段设置时区环境变量 CMD ["/myapp"]
[Related recommendations: Go video tutorial, Programming teaching】
The above is the detailed content of How to set time zone in go language. For more information, please follow other related articles on the PHP Chinese website!