#日期-时间 #日期 #时区 #时间

程序+库 dtt

一个用于解析、验证、操作和格式化日期和时间的Rust库

6 个版本

0.0.6 2024年5月6日
0.0.5 2023年12月5日
0.0.4 2023年5月12日
0.0.3 2023年3月9日
0.0.2 2023年2月10日

#28 in 日期和时间

Download history 808/week @ 2024-04-22 926/week @ 2024-04-29 1641/week @ 2024-05-06 909/week @ 2024-05-13 849/week @ 2024-05-20 628/week @ 2024-05-27 553/week @ 2024-06-03 617/week @ 2024-06-10 702/week @ 2024-06-17 680/week @ 2024-06-24 450/week @ 2024-07-01 677/week @ 2024-07-08 838/week @ 2024-07-15 825/week @ 2024-07-22 841/week @ 2024-07-29 775/week @ 2024-08-05

3,301 每月下载量
用于 16 个Crate (11 直接)

MIT/Apache

79KB
832

DateTime (DTT) logo

DateTime (DTT)

一个用于解析、验证、操作和格式化日期和时间的Rust库

Mini Functions 库系列的一部分。

DTT Banner

Made With Rust Crates.io Lib.rs Docs.rs License Codecov

网站文档报告错误请求功能贡献指南

divider

概述 📖

DateTime (DTT) 库是一个全面且灵活的工具,使开发者能够轻松地管理日期和时间。它提供了一系列函数和数据结构,允许您轻松执行各种日期和时间操作,例如确定月份中的某一天、一天中的小时、处理 ISO 8601 日期和时间格式等。

该库支持使用 UTC 或自定义时区创建新的 DateTime 对象,确保您始终拥有准确和相关的日期和时间信息。此外,它还提供了一种验证输入日期和时间的机制,确保您始终拥有准确的信息来工作。

功能 ✨

DateTime (DTT) 结构体包含以下字段和方法

字段

功能 描述 类型
day 月份中的某一天:(1-31) u8
hour 一天中的小时:(0-23) u8
iso_8601 ISO 8601 日期和时间:(例如 "2023-01-01T00:00:00+00:00") String
iso_week ISO 周数:(1-53) u8
microsecond 微秒:(0-999999) u32
minute 一小时中的分钟:(0-59) u8
month 月份:(例如 "January") String
now 现在对象:(例如 "2023-01-01") String
offset 从 UTC 的偏移:(例如 "+00:00") String
ordinal 序数日期:(1-366) u16
second 一分钟中的秒:(0-59) u8
time 时间对象:(例如 "00:00:00") String
tz 时区对象:(例如 "UTC") String
weekday 星期对象:(例如 "Monday") String
年对象:(例如“2023”) i32

方法

  • new():创建一个新的带有当前UTC时间的DateTime对象。
  • new_with_tz(tz: &str):创建一个新的指定时区的DateTime对象。
  • is_valid_day(input: &str):检查输入是否表示有效的月份中的某一天。
  • is_valid_hour(input: &str):检查输入是否表示一天中的有效小时。
  • is_valid_second(input: &str):检查输入是否表示分钟中的有效秒。
  • is_valid_minute(input: &str):检查输入是否表示小时中的有效分钟。
  • is_valid_month(input: &str):检查输入是否表示一年中的有效月份。
  • is_valid_ordinal(input: &str):检查输入是否表示有效的序数日期。
  • is_valid_time(input: &str):检查输入是否表示有效的时间。
  • is_valid_iso_week(input: &str):检查输入是否表示有效的ISO周数。
  • is_valid_iso_8601(input: &str):检查输入是否表示有效的ISO 8601日期和时间。
  • is_valid_microsecond(input: &str):检查输入是否表示有效的微秒。
  • update(&mut self):根据时区更新DateTime对象为当前日期和时间。
  • add_days(&self, days: i32):创建一个新的DateTime对象,该对象包含指定的天数。
  • next_day(&self):创建一个新的DateTime对象,表示下一天。
  • previous_day(&self): 创建一个表示前一天的新的 DateTime 对象。
  • relative_delta(&self): 创建一个新的 DateTime 对象,其相对偏差基于当前日期和时间。
  • format(&self, format_str: &str): 使用指定的格式将 DateTime 对象格式化为字符串。

该库还提供了各种获取方法来提取 DateTime 对象的各个组成部分,例如 year()month()day()hour()minute()second()microsecond()weekday()ordinal()iso_8601()iso_week()time()tz()offset()

此外,DateTime (DTT) 结构体实现了 FromStr 特性,允许将字符串解析为 DateTime 对象。

入门 🚀

使用 DateTime (DTT) 只需几分钟。

安装

要安装 DateTime (DTT),您需要在您的机器上安装 Rust 工具链。您可以通过遵循 Rust 网站的说明来安装 Rust 工具链。

一旦安装了 Rust 工具链,您可以使用以下命令安装 DateTime (DTT)

cargo install dtt

然后,您可以通过运行帮助命令来查看可用选项

dtt --help

要求

目前支持的最小 Rust 工具链版本是 Rust 1.60 或更高版本(稳定版)。建议您安装最新的稳定版 Rust。

平台支持

DateTime (DTT) 已在包括各种 Linux 发行版、macOS 和 Windows 在内的广泛平台上得到支持和测试。

文档

ℹ️ 信息:请访问我们的网站获取更多信息。您可以在 docs.rslib.rscrates.io 上找到我们的文档。

使用 📖

要在您的项目中使用 DateTime (DTT) 库,请在您的 Cargo.toml 文件中添加以下内容

[dependencies]
dtt = "0.0.6"

在您的 main.rs 文件中添加以下内容

extern crate dtt;
use dtt::*;

然后您可以在应用程序代码中使用这些函数。

示例和测试用例

该库提供了几个示例和测试用例,以帮助您入门。您可以在项目的 examplestests 目录中找到这些。

示例 1:创建一个新的 DateTime 对象并打印它

// Import the DateTime struct and the dtt_print macro
use dtt::DateTime;
use dtt::dtt_print;

#[test]
fn example_1() {
    // Create a new DateTime object and print it
    let now = DateTime::new();
    dtt_print!(now);
}

示例 2:验证各种日期和时间组件的验证方法

// Import the DateTime struct and the validation macros
use dtt::DateTime;
use dtt::{
    is_valid_day,
    is_valid_hour,
    is_valid_minute,
    is_valid_month,
    is_valid_second,
    is_valid_microsecond,
    is_valid_ordinal,
    is_valid_time,
    is_valid_iso_8601
};

// Validate microsecond values
assert!(DateTime::is_valid_microsecond("999999"));
assert!(!DateTime::is_valid_microsecond("1000000"));

// Validate second values
assert!(DateTime::is_valid_second("59"));
assert!(!DateTime::is_valid_second("60"));

// Validate minute values
assert!(DateTime::is_valid_minute("59"));
assert!(!DateTime::is_valid_minute("60"));

// Validate hour values
assert!(DateTime::is_valid_hour("23"));
assert!(!DateTime::is_valid_hour("24"));

// Validate month values
assert!(DateTime::is_valid_month("12"));
assert!(!DateTime::is_valid_month("13"));

// Validate year values
assert!(DateTime::is_valid_ordinal("366"));
assert!(!DateTime::is_valid_ordinal("367"));

// Validate time values
assert!(DateTime::is_valid_time("23:59:59"));
assert!(!DateTime::is_valid_time("24:00:00"));

// Validate ISO 8601 values
assert!(DateTime::is_valid_iso_8601("2023-05-11T17:30:00Z"));
assert!(DateTime::is_valid_iso_8601("2023-05-11T17:30:00+01:00"));

示例 3:验证字符串到 DateTime 的转换

use dtt::DateTime;
use std::str::FromStr;

let date_str = "2022-01-01T12:00:00+01:00";
let mut result: Result<DateTime, dtt::DateTimeError> = DateTime::from_str(date_str);

assert_eq!(result.as_mut().unwrap().iso_8601, date_str);
assert_eq!(result.as_mut().unwrap().year, 2022);
assert_eq!(result.as_mut().unwrap().month, "01");
assert_eq!(result.as_mut().unwrap().day, 1);
assert_eq!(result.as_mut().unwrap().hour, 12);
assert_eq!(result.as_mut().unwrap().minute, 0);
assert_eq!(result.as_mut().unwrap().second, 0);
assert_eq!(result.as_mut().unwrap().offset, "+01:00");
assert_eq!(result.as_mut().unwrap().time, "12:00:00");
assert_eq!(result.as_mut().unwrap().tz, "CET");
assert_eq!(result.as_mut().unwrap().iso_week, 52);
assert_eq!(result.as_mut().unwrap().weekday, "Saturday");
assert_eq!(result.as_mut().unwrap().ordinal, 1);
assert_eq!(result.as_mut().unwrap().microsecond, 0);

语义版本控制策略 🚥

为了使我们的发布周期透明,并努力保持向后兼容性,DateTime (DTT) 遵循 语义版本控制

许可证 📝

本项目根据 MIT 许可证和 Apache 许可证(版本 2.0)的条款进行许可。

贡献 🤝

我们欢迎所有想要贡献的人。有关更多信息,请参阅贡献说明

对本项目的任何形式的贡献(问题、拉取请求等)都必须遵守Rust 的行为准则

除非您明确表示,否则您有意提交的任何贡献,根据 Apache-2.0 许可证的定义,将根据上述方式双重许可,不附加任何额外条款或条件。

故障排除

如果在使用 DateTime (DTT) 库时遇到任何问题,请检查以下内容

  1. 确保您已安装正确的 Rust 工具链,并且它满足最低版本要求。
  2. 验证您是否已正确将库添加到项目的依赖项中。
  3. 检查文档和示例,以了解您想要使用的特定功能。
  4. 如果问题仍然存在,请报告错误,以便项目维护者能够协助您。

致谢 💙

向所有DateTime (DTT) Library的杰出贡献者表示感谢,感谢他们的帮助和支持。

特别感谢Rust Reddit 社区,他们提供了大量有关如何改进此项目的有用建议。

依赖项

~3–5MB
~89K SLoC