gpt4 book ai didi

rust - 字段 tv_sec 在 struct SystemTime 中不存在

转载 作者:行者123 更新时间:2023-11-29 08:22:39 26 4
gpt4 key购买 nike

我正在尝试获取上次修改文件的时间,但出现未找到字段的错误。

use std::{fs, io, time};

fn main() -> io::Result<()> {
let metadata = fs::metadata("foo.txt")?;
let _time: time::SystemTime = metadata.modified().unwrap();
let last_modified = _time.tv_sec;

println!("{:?}", last_modified);
Ok(())
}
error[E0609]: no field `tv_sec` on type `std::time::SystemTime`
--> src/main.rs:6:31
|
6 | let last_modified = _time.tv_sec;
| ^^^^^^ unknown field

我也尝试过在不展开的情况下使用结果,但后来我到达了我想要访问结构的 tv_sec 字段的相同点。

作为解包前的引用,结果是 Ok(SystemTime { tv_sec: 000, tv_nsec: 000 }) 解包后它只是 SystemTime { tv_sec: 000, tv_nsec: 000 } )

我是 Rust 的新手,但我已经梳理了文档,从文档看来我应该能够像那样访问 SystemTime 结构的字段。

最佳答案

您无法访问 tv_sec,因为该字段不公开。这称为可见性,您可以在 chapter 7.2 of the book 中阅读相关信息.

您只能在 SystemTime 上调用公共(public)方法,它可以在 API of SystemTime 中找到.


出现“奇怪”错误消息的原因是,尽管调试表示表明它是一个“扁平”结构(例如,它有两个字段 tv_sectv_nsec), it is actually a tuple struct ,这意味着您必须调用 .0 来获取内部字段,这将导致错误

error[E0616]: field `0` of struct `std::time::SystemTime` is private
--> src/main.rs:10:22
|
10 | println!("{:?}", time.0);
| ^^^^^^

这样做是为了在不同的操作系统上进行抽象;例如,Windows 处理时间的方式与 Unix 不同。


如果您想以秒为单位获得“年龄”,您可以将其转换为 Duration通过使用 SystemTime::elapsed这将返回 Duration,您可以在其中使用 Duration::as_secs 获取秒数.

关于rust - 字段 tv_sec 在 struct SystemTime 中不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55849295/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com