如何用DateTime::format()生成的名称创建文件/目录?
Rust中使用chrono生成格式化目录名的问题解决
问题分析
你遇到的错误核心在于:chrono::DateTime.format()返回的是**DelayedFormat<StrftimeItems<'_>>**类型,这是一个延迟格式化的结构体,并未实现AsRef<Path> trait,而fs::create_dir()要求参数必须满足这个trait约束。
解决方案
只需要将延迟格式化的结果转换为String类型即可——因为String天然实现了AsRef<Path>,可以直接作为create_dir()的参数。
修改后的代码如下:
use std::fs; use chrono; fn main() { let now = chrono::offset::Local::now(); // 调用.to_string()将延迟格式化结果转为String let custom_datetime_format = now.format("%Y%m%d_%H%M%S").to_string(); println!("{}", custom_datetime_format); // 现在可以直接传入create_dir fs::create_dir(&custom_datetime_format).unwrap(); println!("New directory created: {}", custom_datetime_format); }
补充说明
- 注意你原格式字符串里的
%Y%m%y,%y是两位数年份,%Y是四位数年份,通常推荐用%Y%m%d(四位数年+月+日)避免歧义。 fs::create_dir()的返回值是io::Result<()>,成功时返回空元组(),所以不需要用变量接收后打印详细结构,直接打印目录名更有意义。- 也可以用
to_owned()替代to_string(),两者效果一致,都是生成拥有所有权的String实例。
内容的提问来源于stack exchange,提问作者WebOrCode
相关产品推荐
相关产品推荐

