code: func (t Time) ToPackedUint() (uint64, error) {
  	tm := t.Time
  	if t.IsZero() {
  		return 0, nil
  	}
  	year, month, day := tm.Year(), tm.Month(), tm.Day()
  	hour, minute, sec := tm.Hour(), tm.Minute(), tm.Second()
  	ymd := uint64(((year*13 + month) << 5) | day)
  	hms := uint64(hour<<12 | minute<<6 | sec)
  	micro := uint64(tm.Microsecond())
  	return ((ymd<<17 | hms) << 24) | micro, nil
  }
docs: // ToPackedUint encodes Time to a packed uint64 value.
  //
  //    1 bit  0
  //   17 bits year*13+month   (year 0-9999, month 0-12)
  //    5 bits day             (0-31)
  //    5 bits hour            (0-23)
  //    6 bits minute          (0-59)
  //    6 bits second          (0-59)
  //   24 bits microseconds    (0-999999)
  //
  //   Total: 64 bits = 8 bytes
  //
  //   0YYYYYYY.YYYYYYYY.YYdddddh.hhhhmmmm.mmssssss.ffffffff.ffffffff.ffffffff
  //