Source File
zoneinfo.go
Belonging Package
time
package time
import (
)
func ( *Location) ( int64) ( string, int, , int64) {
= .get()
if len(.zone) == 0 {
= "UTC"
= 0
= alpha
= omega
return
}
if := .cacheZone; != nil && .cacheStart <= && < .cacheEnd {
= .name
= .offset
= .cacheStart
= .cacheEnd
return
}
if len(.tx) == 0 || < .tx[0].when {
:= &.zone[.lookupFirstZone()]
= .name
= .offset
= alpha
if len(.tx) > 0 {
= .tx[0].when
} else {
= omega
}
return
}
if !.firstZoneUsed() {
return 0
}
return 0
}
= -
return , , , omega, true
}
, , = tzsetName()
if {
if len() == 0 || [0] == ',' {
= + secondsPerHour
} else {
, , = tzsetOffset()
= - // as with stdOffset, above
}
}
if ! {
return "", 0, 0, 0, false
}
= ",M3.2.0,M11.1.0"
if [0] != ',' && [0] != ';' {
return "", 0, 0, 0, false
}
= [1:]
var , rule
, , = tzsetRule()
if ! || len() == 0 || [0] != ',' {
return "", 0, 0, 0, false
}
= [1:]
, , = tzsetRule()
if ! || len() > 0 {
return "", 0, 0, 0, false
}
, , , := absDate(uint64(+unixToInternal+internalToAbsolute), false)
:= int64(*secondsPerDay) + %secondsPerDay
:= daysSinceEpoch()
:= int64( * secondsPerDay)
+= absoluteToInternal + internalToUnix
:= int64(tzruleTime(, , ))
:= int64(tzruleTime(, , ))
if < {
, = ,
, = ,
, = ,
}
if < {
return , , , + , true
} else if >= {
return , , + , + 365*secondsPerDay, true
} else {
return , , + , + , true
}
}
func ( string) (string, string, bool) {
if len() == 0 {
return "", "", false
}
if [0] != '<' {
for , := range {
switch {
case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ',', '-', '+':
if < 3 {
return "", "", false
}
return [:], [:], true
}
}
if len() < 3 {
return "", "", false
}
return , "", true
} else {
for , := range {
if == '>' {
return [1:], [+1:], true
}
}
return "", "", false
}
}
var int
, , = tzsetNum(, 0, 24*7)
if ! {
return 0, "", false
}
:= * secondsPerHour
if len() == 0 || [0] != ':' {
if {
= -
}
return , , true
}
var int
, , = tzsetNum([1:], 0, 59)
if ! {
return 0, "", false
}
+= * secondsPerMinute
if len() == 0 || [0] != ':' {
if {
= -
}
return , , true
}
var int
, , = tzsetNum([1:], 0, 59)
if ! {
return 0, "", false
}
+=
if {
= -
}
return , , true
}
type ruleKind int
const (
ruleJulian ruleKind = iota
ruleDOY
ruleMonthWeekDay
)
func ( string) (rule, string, bool) {
var rule
if len() == 0 {
return rule{}, "", false
}
:= false
if [0] == 'J' {
var int
, , = tzsetNum([1:], 1, 365)
if ! {
return rule{}, "", false
}
.kind = ruleJulian
.day =
} else if [0] == 'M' {
var int
, , = tzsetNum([1:], 1, 12)
if ! || len() == 0 || [0] != '.' {
return rule{}, "", false
}
var int
, , = tzsetNum([1:], 1, 5)
if ! || len() == 0 || [0] != '.' {
return rule{}, "", false
}
var int
, , = tzsetNum([1:], 0, 6)
if ! {
return rule{}, "", false
}
.kind = ruleMonthWeekDay
.day =
.week =
.mon =
} else {
var int
, , = tzsetNum(, 0, 365)
if ! {
return rule{}, "", false
}
.kind = ruleDOY
.day =
}
if len() == 0 || [0] != '/' {
.time = 2 * secondsPerHour // 2am is the default
return , , true
}
, , := tzsetOffset([1:])
if ! {
return rule{}, "", false
}
.time =
return , , true
}
func ( int, rule, int) int {
var int
switch .kind {
case ruleJulian:
= (.day - 1) * secondsPerDay
if isLeap() && .day >= 60 {
+= secondsPerDay
}
case ruleDOY:
= .day * secondsPerDay
return
}
var errLocation = errors.New("time: invalid location name")
var zoneinfo *string
var zoneinfoOnce sync.Once
return nil, errLocation
}
zoneinfoOnce.Do(func() {
, := syscall.Getenv("ZONEINFO")
zoneinfo = &
})
var error
if *zoneinfo != "" {
if , := loadTzinfoFromDirOrZip(*zoneinfo, ); == nil {
if , := LoadLocationFromTZData(, ); == nil {
return , nil
}
=
} else if != syscall.ENOENT {
=
}
}
if , := loadLocation(, zoneSources); == nil {
return , nil
} else if == nil {
=
}
return nil,
}
![]() |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |