Как превратить время создания файла в целое число? - PullRequest
1 голос
/ 12 октября 2019

С помощью fs :: Metadata :: создал, я могу получить время создания файла.

Для сравнения между файлами за секунды, а не за миллисекунды или что-то еще, простой способ состоит в том, чтобы превратить созданное время вцелое число, измеренное в секундах ...

Но как?

1 Ответ

1 голос
/ 12 октября 2019

Добро пожаловать в переполнение стека!

Вы можете напрямую сравнивать экземпляры std::time::SystemTime, которые вы получаете от std::fs::Metadata::created(), но я предполагаю, что ваш вариант использования специально требует сравнений второй точности. В этом случае:

SystemTime само по себе не предлагает методы преобразования единиц, но предлагает duration_since() и константу UNIX_EPOCH. Из документации :

pub const UNIX_EPOCH: SystemTime

Якорь во времени, который можно использовать для создания новых SystemTime экземпляров или узнать, где во времени лежит SystemTime.

Эта константа определена как «1970-01-01 00:00:00 UTC» во всех системах относительно системных часов.

После того, как вы зададите точку такого типасо ссылкой на duration_since() и получить Duration, вы можете использовать Duration методы преобразования единиц для получения целых чисел, которые вам нужны. Пример:

let a = someFileMetadata.created().expect("Creation time unsupported");
let b = someOtherFileMetadata.created().expect("Creation time unsupported");

let a_secs = a.duration_since(SystemTime::UNIX_EPOCH)
              .expect("File A thinks it was created before Epoch")
              .as_secs();
let b_secs = b.duration_since(SystemTime::UNIX_EPOCH)
              .expect("File B thinks it was created before Epoch")
              .as_secs();

if a_secs > b_secs {
    println!("File A was created later than file B!");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...