MCPcopy
hub / github.com/go-sql-driver/mysql / parseDateTime

Function parseDateTime

utils.go:108–181  ·  utils.go::parseDateTime

****************************************************************************** * Time related utils * ******************************************************************************/

(b []byte, loc *time.Location)

Source from the content-addressed store, hash-verified

106******************************************************************************/
107
108func parseDateTime(b []byte, loc *time.Location) (time.Time, error) {
109 const base = "0000-00-00 00:00:00.000000"
110 switch len(b) {
111 case 10, 19, 21, 22, 23, 24, 25, 26: // up to "YYYY-MM-DD HH:MM:SS.MMMMMM"
112 if string(b) == base[:len(b)] {
113 return time.Time{}, nil
114 }
115
116 year, err := parseByteYear(b)
117 if err != nil {
118 return time.Time{}, err
119 }
120 if b[4] != '-' {
121 return time.Time{}, fmt.Errorf("bad value for field: `%c`", b[4])
122 }
123
124 m, err := parseByte2Digits(b[5], b[6])
125 if err != nil {
126 return time.Time{}, err
127 }
128 month := time.Month(m)
129
130 if b[7] != '-' {
131 return time.Time{}, fmt.Errorf("bad value for field: `%c`", b[7])
132 }
133
134 day, err := parseByte2Digits(b[8], b[9])
135 if err != nil {
136 return time.Time{}, err
137 }
138 if len(b) == 10 {
139 return time.Date(year, month, day, 0, 0, 0, 0, loc), nil
140 }
141
142 if b[10] != ' ' {
143 return time.Time{}, fmt.Errorf("bad value for field: `%c`", b[10])
144 }
145
146 hour, err := parseByte2Digits(b[11], b[12])
147 if err != nil {
148 return time.Time{}, err
149 }
150 if b[13] != ':' {
151 return time.Time{}, fmt.Errorf("bad value for field: `%c`", b[13])
152 }
153
154 min, err := parseByte2Digits(b[14], b[15])
155 if err != nil {
156 return time.Time{}, err
157 }
158 if b[16] != ':' {
159 return time.Time{}, fmt.Errorf("bad value for field: `%c`", b[16])
160 }
161
162 sec, err := parseByte2Digits(b[17], b[18])
163 if err != nil {
164 return time.Time{}, err
165 }

Callers 5

TestParseDateTimeFunction · 0.85
TestInvalidDateTimeFunction · 0.85
TestParseDateTimeFailFunction · 0.85
readRowMethod · 0.85
ScanMethod · 0.85

Calls 3

parseByteYearFunction · 0.85
parseByte2DigitsFunction · 0.85
parseByteNanoSecFunction · 0.85

Tested by 3

TestParseDateTimeFunction · 0.68
TestInvalidDateTimeFunction · 0.68
TestParseDateTimeFailFunction · 0.68