public DateTimeOffsetConverter(string format, DateTimeKind kind, byte filler, Type type) { length = format.Length; entries = DateTimeByteHelper.ParseDateTimeFormat(format, out hasDatePart); this.kind = kind; this.filler = filler; defaultValue = type.GetDefaultValue(); }
public void Write(byte[] buffer, int index, object value) { if (value is null) { BytesHelper.Fill(buffer, index, length, filler); } else { DateTimeByteHelper.FormatDateTime(buffer, index, hasDatePart, entries, ((DateTimeOffset)value).UtcDateTime); } }
public object Read(byte[] buffer, int index) { if (DateTimeByteHelper.TryParseDateTime(buffer, index, entries, kind, out var result)) { if (kind == DateTimeKind.Unspecified) { return(new DateTimeOffset(result, TimeSpan.Zero)); } if (kind == DateTimeKind.Utc) { return(new DateTimeOffset(result)); } var offset = TimeZoneInfo.Local.GetUtcOffset(result); var utcTick = result.Ticks - offset.Ticks; if (DateTimeHelper.IsValidTicks(utcTick)) { return(new DateTimeOffset(result, offset)); } } return(defaultValue); }
public object Read(byte[] buffer, int index) { return(DateTimeByteHelper.TryParseDateTime(buffer, index, entries, kind, out var result) ? result : defaultValue); }