微软返回的 datetimeOffset 是18位 不是正常时间戳 包含了时区偏移信息 133707282032793641
时间: 2024-09-14 14:14:38 浏览: 23
微软的`DateTimeOffset`如果包含18位的信息,这可能是内部的一个特殊编码或者是某种压缩后的形式。给定的133707282032793641看起来像是由几个部分组成的,可以尝试分解理解:
- 首先,前13位可能是Unix时间戳(从1970年1月1日 00:00:00 UTC开始计算的秒数),即:1337072820秒。
- 接下来的9位可能是微秒,因为总长度是22位,而`DateTimeOffset`的标准格式中,包括纳秒最多只能到9位(因为秒有10位,毫秒有3位)。
- 最后可能是一个隐含的时区偏移量,由于没有明确给出,需要推测或者额外解析。
为了正确地将这样的值转换为`DateTimeOffset`,你可以这么做:
```csharp
long combinedValue = 133707282032793641L; // 假设这是整体数值
// 分解为秒、微秒和潜在的偏移量
ulong seconds = combinedValue / 10000000; // 秒数部分
ulong microseconds = (combinedValue % 10000000) * 1000; // 微秒乘以1000(因为`DateTimeOffset`以毫秒为单位)
DateTime dateTime = DateTime.UnixEpoch.AddSeconds(seconds).AddMilliseconds(microseconds / 1000); // 添加时区偏移前的本地时间
// 如果需要考虑时区,这里需要进一步处理,例如查找偏移量并加到dateTime上
// 可能需要额外的上下文信息来确定偏移量
TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById("Your_Time_Zone_Name");
DateTimeOffset DateTimeOffsetValue = new DateTimeOffset(dateTime, timeZone.GetUtcOffset(dateTime));
```
请注意,上述代码假设偏移量是以`TimeZoneInfo`中的名称找到的,实际上可能需要一个外部数据源或函数来确定具体的偏移。