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