关于c#:将DateTimeOffset转换为Int64并返回DateTimeOffset


Convert DateTimeOffset to Int64 and back to DateTimeOffset

我需要将DateTimeOffset添加到我维护的二进制序列化库中。 使用DateTime,我只是将ticks保存为Int64,但DateTimeOffset没有作为构造函数的ticks。 如何正确地重建?

1
2
3
4
5
6
7
DateTime date = new DateTime.Now;
long ticks = date.Ticks;
DateTime date2 = new DateTime(ticks);

DateTimeOffset dateOffset = new DateTimeOffset.Now;
long ticks2 = dateOffset.Ticks;
DateTimeOffset dateOffset2 = new DateTimeOffset(?)


DateTimeOffset does not have ticks as a constructor

它确实有一个带刻度和偏移的构造函数......

1
DateTimeOffset(Int64, TimeSpan)

...而TimeSpan可以用刻度值构建......

1
TimeSpan(Int64)

...所以,您可以将DateTimeOffset序列化为两个Int64值...

1
2
3
4
5
6
7
8
DateTimeOffset dto = DateTimeOffset.Now;

var ticks = dto.Ticks;
var offset = dto.Offset.Ticks;

DateTimeOffset newDto = new DateTimeOffset(ticks, new TimeSpan(offset));

Debug.Assert(dto.EqualsExact(newDto),"DateTmeOffset Mismatch");