azkustodata/value/datetime.go (50 lines of code) (raw):

package value import ( "fmt" "github.com/Azure/azure-kusto-go/azkustodata/types" "reflect" "time" ) // DateTime represents a Kusto datetime type. DateTime implements Kusto. type DateTime struct { pointerValue[time.Time] } // NewDateTime creates a new DateTime. func NewDateTime(v time.Time) *DateTime { return &DateTime{newPointerValue[time.Time](&v)} } // NewNullDateTime creates a new null DateTime. func NewNullDateTime() *DateTime { return &DateTime{newPointerValue[time.Time](nil)} } // String implements fmt.Stringer. func (d *DateTime) String() string { if d.value == nil { return "" } return fmt.Sprint(d.value.Format(time.RFC3339Nano)) } // Marshal marshals the DateTime into a Kusto compatible string. func (d *DateTime) Marshal() string { if d.value == nil { return time.Time{}.Format(time.RFC3339Nano) } return d.value.Format(time.RFC3339Nano) } // Unmarshal unmarshals i into DateTime. i must be a string representing RFC3339Nano or nil. func (d *DateTime) Unmarshal(i interface{}) error { if i == nil { d.value = nil return nil } str, ok := i.(string) if !ok { return convertError(d, i) } t, err := time.Parse(time.RFC3339Nano, str) if err != nil { return parseError(d, i, err) } d.value = &t return nil } // Convert DateTime into reflect value. func (d *DateTime) Convert(v reflect.Value) error { return Convert[time.Time](*d, &d.pointerValue, v) } // GetType returns the type of the value. func (d *DateTime) GetType() types.Column { return types.DateTime }