5个版本

0.2.0 2024年6月5日
0.1.3 2024年2月18日
0.1.2 2024年2月15日
0.1.1 2024年2月13日
0.1.0 2024年1月22日

#143日期和时间

MIT 许可证

34KB
922

Langtime - 在Rust中解析日期

这个库是一个个人项目,允许Rust程序员解析用英文书写的日期,包括绝对和相对日期。以下是您可以当前解析的一些日期示例

  • 2024-01-0120:15
  • 28/02/202410一个.分钟.
  • 25之前

为什么在chrono-english已经存在的情况下还要创建这个仓库呢?原因有两个。首先,我不知道它的存在。其次,有一些格式或其组合无法用chrono_english解析。

此库使用nom,这使得添加新格式到可解析输入变得极其简单。

如何使用

此库最基本的使用方法如下

fn main() {
    match langtime::parse("12/05/2024 at 8pm") {
        Ok(datetime) => println!("{:?}", datetime),
        Err(_) => println!("Cannot parse input as a date")
    };
}

默认情况下,解析函数将丢弃任何超出日期时间字符串的输入。例如,此代码也会正确匹配类似“12/05/2024是日期”的字符串,即使“是日期”不是作为时间或日期格式识别。

您可以通过配置结构体传递一些选项。第一个是英语方言(美国或英国)。这目前仅用于区分该语言的日期格式是“dd/mm/yyyy”还是“mm/dd/yyyy”。然后,您还可以强制库检查整个字符串是否可以解析为日期,因此文本“12/05/2024是日期”将不再被视为正确,并导致错误。

以下是您如何做到这一点

use langtime::{parse_with_config, ParseConfig, Dialect};

fn main() {
    let config = ParseConfig {
        dialect: Dialect::US,
        full_string_match: true
    };
    
    match parse_with_config("05/23/2024 at 9pm", &config) {
        Ok(datetime) => println!("{:?}", datetime),
        Err(_) => println!("Cannot parse input as a date")
    }
}

下一个目标

  • 扩展允许的标记以分离句子的各个部分
  • 正确计算月份和年份
  • 实现单元测试
  • 添加缺少的时间格式
  • 在解析之前清理文本
  • 添加英语方言(英国/美国)的配置
  • 添加强制匹配整个字符串的配置

可解析数据

日期

  • 2024-01-20 (ISO)
  • 20/01/2024
  • 昨天 / 明天
  • 01/2024 (月初)
  • 2024年1月 (与上述相同)

时间

  • 17:00
  • 17:00:30
  • 下午5点 / 5pm
  • 8点 / 9点半 / 9点15分

相对时间和日期

  • 5小时后
  • 8分钟前
  • 2小时8分钟10秒前
  • 上周五
  • 下周二
  • 周六 / 本周六
  • 2天前
  • 3个月后

完整的日期和时间

  • 2024-01-01T20:30:10
  • 昨天17:00
  • 明天晚上8点
  • 2天前早上5点
  • 上周五9点

依赖项

~2MB
~37K SLoC