1// Copyright 2013 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package time
6
7import (
8	"sync"
9)
10
11func ResetLocalOnceForTest() {
12	localOnce = sync.Once{}
13	localLoc = Location{}
14}
15
16func ForceUSPacificForTesting() {
17	ResetLocalOnceForTest()
18	localOnce.Do(initTestingZone)
19}
20
21func ZoneinfoForTesting() *string {
22	return zoneinfo
23}
24
25func ResetZoneinfoForTesting() {
26	zoneinfo = nil
27	zoneinfoOnce = sync.Once{}
28}
29
30var (
31	DisablePlatformSources = disablePlatformSources
32	GorootZoneSource       = gorootZoneSource
33	ParseTimeZone          = parseTimeZone
34	SetMono                = (*Time).setMono
35	GetMono                = (*Time).mono
36	ErrLocation            = errLocation
37	ReadFile               = readFile
38	LoadTzinfo             = loadTzinfo
39	NextStdChunk           = nextStdChunk
40	Tzset                  = tzset
41	TzsetName              = tzsetName
42	TzsetOffset            = tzsetOffset
43)
44
45func LoadFromEmbeddedTZData(zone string) (string, error) {
46	return loadFromEmbeddedTZData(zone)
47}
48
49type RuleKind int
50
51const (
52	RuleJulian       = RuleKind(ruleJulian)
53	RuleDOY          = RuleKind(ruleDOY)
54	RuleMonthWeekDay = RuleKind(ruleMonthWeekDay)
55	UnixToInternal   = unixToInternal
56)
57
58type Rule struct {
59	Kind RuleKind
60	Day  int
61	Week int
62	Mon  int
63	Time int
64}
65
66func TzsetRule(s string) (Rule, string, bool) {
67	r, rs, ok := tzsetRule(s)
68	rr := Rule{
69		Kind: RuleKind(r.kind),
70		Day:  r.day,
71		Week: r.week,
72		Mon:  r.mon,
73		Time: r.time,
74	}
75	return rr, rs, ok
76}
77
78// StdChunkNames maps from nextStdChunk results to the matched strings.
79var StdChunkNames = map[int]string{
80	0:                               "",
81	stdLongMonth:                    "January",
82	stdMonth:                        "Jan",
83	stdNumMonth:                     "1",
84	stdZeroMonth:                    "01",
85	stdLongWeekDay:                  "Monday",
86	stdWeekDay:                      "Mon",
87	stdDay:                          "2",
88	stdUnderDay:                     "_2",
89	stdZeroDay:                      "02",
90	stdUnderYearDay:                 "__2",
91	stdZeroYearDay:                  "002",
92	stdHour:                         "15",
93	stdHour12:                       "3",
94	stdZeroHour12:                   "03",
95	stdMinute:                       "4",
96	stdZeroMinute:                   "04",
97	stdSecond:                       "5",
98	stdZeroSecond:                   "05",
99	stdLongYear:                     "2006",
100	stdYear:                         "06",
101	stdPM:                           "PM",
102	stdpm:                           "pm",
103	stdTZ:                           "MST",
104	stdISO8601TZ:                    "Z0700",
105	stdISO8601SecondsTZ:             "Z070000",
106	stdISO8601ShortTZ:               "Z07",
107	stdISO8601ColonTZ:               "Z07:00",
108	stdISO8601ColonSecondsTZ:        "Z07:00:00",
109	stdNumTZ:                        "-0700",
110	stdNumSecondsTz:                 "-070000",
111	stdNumShortTZ:                   "-07",
112	stdNumColonTZ:                   "-07:00",
113	stdNumColonSecondsTZ:            "-07:00:00",
114	stdFracSecond0 | 1<<stdArgShift: ".0",
115	stdFracSecond0 | 2<<stdArgShift: ".00",
116	stdFracSecond0 | 3<<stdArgShift: ".000",
117	stdFracSecond0 | 4<<stdArgShift: ".0000",
118	stdFracSecond0 | 5<<stdArgShift: ".00000",
119	stdFracSecond0 | 6<<stdArgShift: ".000000",
120	stdFracSecond0 | 7<<stdArgShift: ".0000000",
121	stdFracSecond0 | 8<<stdArgShift: ".00000000",
122	stdFracSecond0 | 9<<stdArgShift: ".000000000",
123	stdFracSecond9 | 1<<stdArgShift: ".9",
124	stdFracSecond9 | 2<<stdArgShift: ".99",
125	stdFracSecond9 | 3<<stdArgShift: ".999",
126	stdFracSecond9 | 4<<stdArgShift: ".9999",
127	stdFracSecond9 | 5<<stdArgShift: ".99999",
128	stdFracSecond9 | 6<<stdArgShift: ".999999",
129	stdFracSecond9 | 7<<stdArgShift: ".9999999",
130	stdFracSecond9 | 8<<stdArgShift: ".99999999",
131	stdFracSecond9 | 9<<stdArgShift: ".999999999",
132}
133
134var Quote = quote
135
136var AppendInt = appendInt
137var AppendFormatAny = Time.appendFormat
138var AppendFormatRFC3339 = Time.appendFormatRFC3339
139var ParseAny = parse
140var ParseRFC3339 = parseRFC3339[string]
141