我们使用Azure事件中心(Message Broker(来生成事件并将其存储在该服务中。
作为事件生产者:许多事件/消息被推送到Azure事件中心空间,所有这些事件都具有以下格式(类似(:
{
body:{
id: 3123123123,
name: "name",
parentId: "12123esczxcxef"
},
properties:{
event:"sample.type-saved",
token:"tokenise data",
**timestamp: 638018037948740000** //c# tick DateTime
},
//additional info
}
properties.timestamp
值使用刻度时间(长(发送。
作为事件消费者:使用EventHubConsumerClient.subscribe
,客户端开始从Azure中的事件中心接收事件/消息,如下所示:
{
body:{
id: 3123123123,
name: "name",
parentId: "12123esczxcxef"
},
properties: {
event: 'platform.location-sendall',
token: 'eyJhbGciOiJod...',
**timestamp: [Object]**
},
offset: '4295510040',
sequenceNumber: 488,
enqueuedTimeUtc: 2022-10-19T18:38:11.600Z,
partitionKey: undefined,
systemProperties: {},
getRawAmqpMessage: [Function: getRawAmqpMessage]
}
收到properties.timestamp
,并且具有[Object]
日期未知格式,,并且不知道如何解析或转换它。
properties.timestamp
[Object]的一个例子是:
{
'0': 8,
'1': 218,
'2': 178,
'3': 1,
'4': 19,
'5': 222,
'6': 23,
'7': 128
}
- 为什么Event Hub会返回这种时间戳Date值
- 如何解析此日期值
- 任何其他相关信息都会有所帮助
我明白了,上下文中的timestamp
表示ticks
。在SQL Server中,您可以执行以下操作:
DECLARE @t bigint = 638018037948740000;
SELECT CONVERT(datetime,
(@t - 599266080000000000) -- subtract ticks for 1900-01-01
/ 10000000 -- divide by microseconds
/ 86400); -- then by seconds in a day
2022-10-19 19:16:34.873
在C#中,您可以像在您引用的URL中一样使用Datetime..Ticks
(不是C#人员,因此无法在那里帮助您(。
只需确保不要尝试将输出存储在timestamp
列中,因为在SQL Server中,这与日期/时间无关。