Files
1Panel/core/utils/common/time.go

51 lines
975 B
Go

package common
import (
"strings"
"sync"
"time"
"github.com/1Panel-dev/1Panel/core/utils/cmd"
)
func LoadTimeZoneByCmd() string {
loc := time.Now().Location().String()
if _, err := time.LoadLocation(loc); err != nil {
loc = "Asia/Shanghai"
}
std, err := cmd.NewCommandMgr().RunWithStdout("timedatectl")
if err != nil {
return loc
}
for _, line := range strings.Split(std, "\n") {
fields := strings.Fields(line)
if len(fields) != 5 || fields[0] != "Time" || fields[1] != "zone:" {
continue
}
if _, err := time.LoadLocation(fields[2]); err != nil {
return loc
}
return fields[2]
}
return loc
}
func LoadExpiredLocation() *time.Location {
var (
expiredLoc *time.Location
expiredLocOnce sync.Once
)
expiredLocOnce.Do(func() {
loc, err := time.LoadLocation(LoadTimeZoneByCmd())
if err != nil {
expiredLoc = time.Local
return
}
expiredLoc = loc
})
if expiredLoc == nil {
return time.Local
}
return expiredLoc
}