Constructing DatetimeOffset object based on Ticks giving incorrect value
DateTimeOffset值要存储在数据库表:我as belowP></
1
| 2002-08-27 07:49:20.3190000 -11:00 |
现在这样的值:在binary filewrite thisP></
1 2 3
| DateTimeOffset d ="2002-08-27 07:49:20.3190000 -11:00";
BinaryWriter w ;
w.Write(d.Ticks); |
现在,当我试图使用二进制阅读器读取这个值,那么它是生成基于Ticks类:incorrectly belowP></
1 2 3
| BinaryReader r ;
var dateTime = DateTime .FromBinary(r .ReadInt64());
return new DateTimeOffset (dateTime ); |
输出:8/27/2002 7:49:20 AM +05:30P></
这是如何发生的?P></
how to construct DateTimeOffset对象基于ticks properly精确吗?P></
- 你住在哪个时区?您是否可以通过删除BinaryWriter或BinaryReader进一步简化上面的代码示例?
- DateTimeOffset包含不属于计时周期的时区信息。通过只写记号而不写tz,可以得到与使用DateTime时相同的数据。
- @但那又有什么关系呢?我的表中存储了一些值,所以我只想写它,然后出于某种目的再次读取它。抱歉,如果我错过了与datetimeoffset数据类型相关的内容,因为我以前没有使用过它。
- 我在教你钓鱼。您还可以找到感兴趣的docs.microsoft.com/en-us/dotnet/api/…。
- 当数据依赖于日期时间时,在数据库中保存日期时间和时区信息的最佳实践可能重复
- 在某种程度上,你是幸运的,这项工作在所有。你写的东西和你读的完全不同。DateTime.FromBinary设计用于读取使用DateTime.ToBinary生成的数据。恰好如此,DateTimeOffset.Ticks生成的数据大致相当于它。
- BinaryWriter没有任何方法来写入DateTimeOffset,因此我只剩下一个选项,那就是写入写入方法的滴答声,以及读取时需要执行的操作。是否还有其他方法来读取和写入DateTimeOffset值?
- 您是否考虑改为向JSON序列化?stackoverflow.com/a/25105519/34092
- @mrbean有几种方法,dt+tz作为long,string使用往返格式…
您需要同时存储UTC刻度和时区偏移量:
1 2 3 4 5 6 7 8 9
| DateTimeOffset d ="2002-08-27 07:49:20.3190000 -11:00";
BinaryWriter w ;
w .Write(d .Ticks);
w .Write(d .Offset.Ticks);
BinaryReader r ;
var dateTime = new DateTime (r .ReadInt64());
var offset = new TimeSpan (r .ReadInt64());
return new DateTimeOffset (dateTime, offset ); |
- 感谢您对我的帮助。非常感谢。是否可以将UTC时间刻度和时区偏移量结合起来,只写一次而不写两次?
- 你的作者可能支持流媒体,写两次不是问题。如果确实要存储单个值,可以使用往返格式将DateTimeOffset转换为字符串。
- 我正在使用.NET库中的此类:docs.microsoft.com/en-us/dotnet/api/…
- 我是说,你的作者所写的《江户记》不是《江户记》本身。
- 我想问你,假设我在数据库表中存储了一个datetimeoffset值,这样就可以使用基dbdatareader类方法getdatetime读取它,然后构造datetimeoffset对象了?
- 如果数据以时间戳的形式存储在数据库中,它可能包含可以由DBDataReader读取的TZ信息。如果它存储为纯日期/时间,则必须知道数据/时间与哪个时区相关联,并手动构建DateTimeOffset。
- 另外,看看EDOCX1的来源(0)。它存储一个日期时间(64位)和一个偏移量(16位)。所以您可以使用较少的位作为偏移部分。(总共需要80位,而不是128位)。另外,它实现了ISerializable,因此您不必手动完成这项工作。只需使用BinaryFormatter。