8 个版本
0.2.17 | 2024年1月26日 |
---|---|
0.2.16 | 2023年12月29日 |
0.2.12 |
|
0.2.11 |
|
0.1.11 | 2022年6月21日 |
在 解析器实现 中排名 154
每月下载量 3,028
在 28 个crate(16 个直接使用)中使用
72KB
1.5K SLoC
ISO8601 时间戳
此crate提供高性能的ISO8601时间戳格式化和解析例程,主要关注UTC值,但也支持解析(并自动应用)UTC偏移量。
其主要目的是在数据结构中保持时间戳的轻量级表示,仅在需要时通过Serde进行格式化。
Timestamp
结构体仅占12字节,而格式化后的字符串可以长达35字节,并且在格式化时注意避免堆分配。
示例
use serde::{Serialize, Deserialize};
use smol_str::SmolStr; // stack-allocation for small strings
use iso8601_timestamp::Timestamp;
#[derive(Debug, Clone, Serialize)]
pub struct Event {
name: SmolStr,
ts: Timestamp,
value: i32,
}
序列化为JSON可能得到
{
"name": "some_event",
"ts": "2021-10-17T02:03:01Z",
"value": 42
}
在将时间戳序列化为非人类可读的格式,如二进制格式时,Timestamp
将以表示自Unix纪元以来的毫秒数的 i64
的形式写入。这样,它只使用8字节而不是24字节。
同样,在反序列化时,它支持ISO8601字符串或表示毫秒Unix时间戳的 i64
。
Cargo 功能
-
std
(默认)- 启用标准库功能,例如获取当前时间。
-
lookup
(默认)- 在格式化期间启用使用200字节查找表。具有热缓存时略快。禁用可节省200字节,但速度大约会减慢20%。
-
serde
(默认)- 为
Timestamp
和TimestampStr
启用 serde 实现
- 为
-
rkyv
- 为
Timestamp
启用rkyv
归档支持,将其序列化为64位有符号的Unix偏移量(毫秒)。
- 为
-
verify
- 在解析时验证数字输入,并在发现非数字输入时失败。
- 禁用时,解析忽略无效输入,可能产生垃圾时间戳。
-
nightly
- 启用针对nightly的特定优化,但如果没有它,将回退到启用相同优化的工作方案。
-
pg
- 启用
ToSql
/FromSql
对Timestamp
的实现,使其可以直接使用rust-postgres
存储或检索 PostgreSQL 数据库中的数据。
- 启用
-
rusqlite
- 启用
ToSql
/FromSql
对Timestamp
的实现,使其可以从rusqlite
/sqlite3
数据库中存储或检索数据。
- 启用
-
diesel
/diesel-pg
- 启用对 diesel
ToSql
/FromSql
和AsExpression
的支持。
- 启用对 diesel
-
schema
- 启用
JsonSchema
的实现,使用schemars
动态生成 JSON 架构。
- 启用
-
bson
- 启用
visit_map
实现以处理反序列化 BSON (MongoDB) DateTime 格式,{ $date: string }
。
- 启用
-
rand
- 启用
rand
实现,以生成随机时间戳。
- 启用
-
quickcheck
- 在
Timestamp
上启用quickcheck
的Arbitrary
实现。
- 在
-
worker
- 在 Cloudflare workers 中启用对
now_utc()
的支持。
- 在 Cloudflare workers 中启用对
-
js
- 使用
js-sys
在 WASM 中启用对now_utc()
的支持。
- 使用
-
ramhorns
- 为
Timestamp
实现Content
,将其格式化为常规 ISO8601 时间戳。注意,ramhorns
是 GPLv3。
- 为
依赖项
~1–9.5MB
~176K SLoC