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	ForceZipFileForTesting = forceZipFileForTesting
32	ParseTimeZone          = parseTimeZone
33	SetMono                = (*Time).setMono
34	GetMono                = (*Time).mono
35	ErrLocation            = errLocation
36	ReadFile               = readFile
37	LoadTzinfo             = loadTzinfo
38	NextStdChunk           = nextStdChunk
39	Tzset                  = tzset
40	TzsetName              = tzsetName
41	TzsetOffset            = tzsetOffset
42)
43
44func LoadFromEmbeddedTZData(zone string) (string, error) {
45	return loadFromEmbeddedTZData(zone)
46}
47
48type RuleKind int
49
50const (
51	RuleJulian       = RuleKind(ruleJulian)
52	RuleDOY          = RuleKind(ruleDOY)
53	RuleMonthWeekDay = RuleKind(ruleMonthWeekDay)
54	UnixToInternal   = unixToInternal
55)
56
57type Rule struct {
58	Kind RuleKind
59	Day  int
60	Week int
61	Mon  int
62	Time int
63}
64
65func TzsetRule(s string) (Rule, string, bool) {
66	r, rs, ok := tzsetRule(s)
67	rr := Rule{
68		Kind: RuleKind(r.kind),
69		Day:  r.day,
70		Week: r.week,
71		Mon:  r.mon,
72		Time: r.time,
73	}
74	return rr, rs, ok
75}
76
77// StdChunkNames maps from nextStdChunk results to the matched strings.
78var StdChunkNames = map[int]string{
79	0:                               "",
80	stdLongMonth:                    "January",
81	stdMonth:                        "Jan",
82	stdNumMonth:                     "1",
83	stdZeroMonth:                    "01",
84	stdLongWeekDay:                  "Monday",
85	stdWeekDay:                      "Mon",
86	stdDay:                          "2",
87	stdUnderDay:                     "_2",
88	stdZeroDay:                      "02",
89	stdUnderYearDay:                 "__2",
90	stdZeroYearDay:                  "002",
91	stdHour:                         "15",
92	stdHour12:                       "3",
93	stdZeroHour12:                   "03",
94	stdMinute:                       "4",
95	stdZeroMinute:                   "04",
96	stdSecond:                       "5",
97	stdZeroSecond:                   "05",
98	stdLongYear:                     "2006",
99	stdYear:                         "06",
100	stdPM:                           "PM",
101	stdpm:                           "pm",
102	stdTZ:                           "MST",
103	stdISO8601TZ:                    "Z0700",
104	stdISO8601SecondsTZ:             "Z070000",
105	stdISO8601ShortTZ:               "Z07",
106	stdISO8601ColonTZ:               "Z07:00",
107	stdISO8601ColonSecondsTZ:        "Z07:00:00",
108	stdNumTZ:                        "-0700",
109	stdNumSecondsTz:                 "-070000",
110	stdNumShortTZ:                   "-07",
111	stdNumColonTZ:                   "-07:00",
112	stdNumColonSecondsTZ:            "-07:00:00",
113	stdFracSecond0 | 1<<stdArgShift: ".0",
114	stdFracSecond0 | 2<<stdArgShift: ".00",
115	stdFracSecond0 | 3<<stdArgShift: ".000",
116	stdFracSecond0 | 4<<stdArgShift: ".0000",
117	stdFracSecond0 | 5<<stdArgShift: ".00000",
118	stdFracSecond0 | 6<<stdArgShift: ".000000",
119	stdFracSecond0 | 7<<stdArgShift: ".0000000",
120	stdFracSecond0 | 8<<stdArgShift: ".00000000",
121	stdFracSecond0 | 9<<stdArgShift: ".000000000",
122	stdFracSecond9 | 1<<stdArgShift: ".9",
123	stdFracSecond9 | 2<<stdArgShift: ".99",
124	stdFracSecond9 | 3<<stdArgShift: ".999",
125	stdFracSecond9 | 4<<stdArgShift: ".9999",
126	stdFracSecond9 | 5<<stdArgShift: ".99999",
127	stdFracSecond9 | 6<<stdArgShift: ".999999",
128	stdFracSecond9 | 7<<stdArgShift: ".9999999",
129	stdFracSecond9 | 8<<stdArgShift: ".99999999",
130	stdFracSecond9 | 9<<stdArgShift: ".999999999",
131}
132
133var Quote = quote
134