34 lines
847 B
Go
34 lines
847 B
Go
package parser
|
|
|
|
import (
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
const fallbackTimezoneName = "Europe/Moscow"
|
|
|
|
var (
|
|
fallbackTimezoneOnce sync.Once
|
|
fallbackTimezone *time.Location
|
|
)
|
|
|
|
// DefaultArchiveLocation returns the timezone used for source timestamps
|
|
// that do not contain an explicit offset.
|
|
func DefaultArchiveLocation() *time.Location {
|
|
fallbackTimezoneOnce.Do(func() {
|
|
loc, err := time.LoadLocation(fallbackTimezoneName)
|
|
if err != nil {
|
|
fallbackTimezone = time.FixedZone("MSK", 3*60*60)
|
|
return
|
|
}
|
|
fallbackTimezone = loc
|
|
})
|
|
return fallbackTimezone
|
|
}
|
|
|
|
// ParseInDefaultArchiveLocation parses timestamps without timezone information
|
|
// using Europe/Moscow as the assumed source timezone.
|
|
func ParseInDefaultArchiveLocation(layout, value string) (time.Time, error) {
|
|
return time.ParseInLocation(layout, value, DefaultArchiveLocation())
|
|
}
|