| 228 | } |
| 229 | |
| 230 | func parseBinaryDateTime(num uint64, data []byte, loc *time.Location) (driver.Value, error) { |
| 231 | switch num { |
| 232 | case 0: |
| 233 | return time.Time{}, nil |
| 234 | case 4: |
| 235 | return time.Date( |
| 236 | int(binary.LittleEndian.Uint16(data[:2])), // year |
| 237 | time.Month(data[2]), // month |
| 238 | int(data[3]), // day |
| 239 | 0, 0, 0, 0, |
| 240 | loc, |
| 241 | ), nil |
| 242 | case 7: |
| 243 | return time.Date( |
| 244 | int(binary.LittleEndian.Uint16(data[:2])), // year |
| 245 | time.Month(data[2]), // month |
| 246 | int(data[3]), // day |
| 247 | int(data[4]), // hour |
| 248 | int(data[5]), // minutes |
| 249 | int(data[6]), // seconds |
| 250 | 0, |
| 251 | loc, |
| 252 | ), nil |
| 253 | case 11: |
| 254 | return time.Date( |
| 255 | int(binary.LittleEndian.Uint16(data[:2])), // year |
| 256 | time.Month(data[2]), // month |
| 257 | int(data[3]), // day |
| 258 | int(data[4]), // hour |
| 259 | int(data[5]), // minutes |
| 260 | int(data[6]), // seconds |
| 261 | int(binary.LittleEndian.Uint32(data[7:11]))*1000, // nanoseconds |
| 262 | loc, |
| 263 | ), nil |
| 264 | } |
| 265 | return nil, fmt.Errorf("invalid DATETIME packet length %d", num) |
| 266 | } |
| 267 | |
| 268 | func appendDateTime(buf []byte, t time.Time, timeTruncate time.Duration) ([]byte, error) { |
| 269 | if timeTruncate > 0 { |