#iso-8601 #date-time #formatting #parser #date #time

no-std iso8601-timestamp

高性能 ISO8601 时间戳格式化和解析

8 个版本

0.2.17 2024年1月26日
0.2.16 2023年12月29日
0.2.12 2023年9月20日
0.2.11 2023年6月19日
0.1.11 2022年6月21日

解析器实现 中排名 154

Download history 1030/week @ 2024-03-14 1120/week @ 2024-03-21 1233/week @ 2024-03-28 1238/week @ 2024-04-04 665/week @ 2024-04-11 819/week @ 2024-04-18 807/week @ 2024-04-25 993/week @ 2024-05-02 604/week @ 2024-05-09 790/week @ 2024-05-16 624/week @ 2024-05-23 761/week @ 2024-05-30 798/week @ 2024-06-06 690/week @ 2024-06-13 935/week @ 2024-06-20 464/week @ 2024-06-27

每月下载量 3,028
28crate(16 个直接使用)中使用

MIT/Apache 协议

72KB
1.5K SLoC

ISO8601 时间戳

crates.io Documentation MIT/Apache-2 licensed

此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(默认)

    • TimestampTimestampStr 启用 serde 实现
  • rkyv

    • Timestamp 启用 rkyv 归档支持,将其序列化为64位有符号的Unix偏移量(毫秒)。
  • verify

    • 在解析时验证数字输入,并在发现非数字输入时失败。
    • 禁用时,解析忽略无效输入,可能产生垃圾时间戳。
  • nightly

    • 启用针对nightly的特定优化,但如果没有它,将回退到启用相同优化的工作方案。
  • pg

    • 启用 ToSql/FromSqlTimestamp 的实现,使其可以直接使用 rust-postgres 存储或检索 PostgreSQL 数据库中的数据。
  • rusqlite

    • 启用 ToSql/FromSqlTimestamp 的实现,使其可以从 rusqlite/sqlite3 数据库中存储或检索数据。
  • diesel/diesel-pg

    • 启用对 diesel ToSql/FromSqlAsExpression 的支持。
  • schema

    • 启用 JsonSchema 的实现,使用 schemars 动态生成 JSON 架构。
  • bson

    • 启用 visit_map 实现以处理反序列化 BSON (MongoDB) DateTime 格式,{ $date: string }
  • rand

    • 启用 rand 实现,以生成随机时间戳。
  • quickcheck

    • Timestamp 上启用 quickcheckArbitrary 实现。
  • worker

    • 在 Cloudflare workers 中启用对 now_utc() 的支持。
  • js

    • 使用 js-sys 在 WASM 中启用对 now_utc() 的支持。
  • ramhorns

    • Timestamp 实现 Content,将其格式化为常规 ISO8601 时间戳。注意,ramhorns 是 GPLv3。

依赖项

~1–9.5MB
~176K SLoC