При преобразовании строки в объект Chrono вы должны знать, какие части имеет формат ввода строки.
Части: Дата, время, часовой пояс
Примеры:
ParseError (NotEnough) отображается, когда недостаточно информации для заполнения Весь объект Например, дата, время или часовой пояс отсутствуют.
Если форматы не совпадают со строкой, вы получаете ParseError (TooShort) или ParseError (Invalid) error.
Спецификация для строкового формата, например "%Y-%m-%d %H:%M:%S"
: https://docs.rs/chrono/0.4.11/chrono/format/strftime/index.html
RFC2822 = Дата + Время + TimeZone
Для преобразования строки RFC2822 используйте parse_from_rfc2822 (..) функция.
let date_str = "Tue, 1 Jul 2003 10:52:37 +0200";
let datetime = DateTime::parse_from_rfc2822(date_str).unwrap();
RFC3339 = Дата + Время + TimeZone
Для преобразования RFC3339 или ISO 8601 используйте строку parse_from_rfc3339 (..) функция.
let date_str = "2020-04-12 22:10:57+02:00";
// convert the string into DateTime<FixedOffset>
let datetime = DateTime::parse_from_rfc3339(date_str).unwrap();
// convert the string into DateTime<Utc> or other timezone
let datetime_utc = datetime.with_timezone(&Utc);
Дата + Время + Часовой пояс (другой или нестандартный)
Для преобразования других строк DateTime используйте parse_from_str (..) function.
let date_str = "2020-04-12 22:10:57 +02:00";
let datetime = DateTime::parse_from_str(date_str, "%Y-%m-%d %H:%M:%S %z").unwrap();
Date + Time
Если у вас нет TimeZone, вам нужно использовать NaiveDateTime . Этот объект не хранит часовой пояс:
let date_str = "2020-04-12 22:10:57";
let naive_datetime = NaiveDateTime::parse_from_str(date_str, "%Y-%m-%d %H:%M:%S").unwrap();
Дата
Если мы анализируем дату (без времени), мы можем сохранить ее в NaiveDate . Этот объект не хранит время или часовой пояс:
let date_str = "2020-04-12 22:10:57";
let naive_date = NaiveDate::parse_from_str(date_str, "%Y-%m-%d").unwrap();
Время
Если мы анализируем время (без даты), мы можем сохранить его в NaiveTime, Этот объект не хранит дату или часовой пояс:
let time_str = "22:10:57";
let naive_time = NaiveTime::parse_from_str(time_str, "%H:%M:%S").unwrap();
Добавить дату, время и / или часовой пояс
Если у нас есть какая-то строка и мы хотим добавить дополнительную информацию, мы можем изменить тип , Но вы должны предоставить эту информацию самостоятельно.
let date_str = "2020-04-12";
// From string to a NaiveDate
let naive_date = NaiveDate::parse_from_str(date_str, "%Y-%m-%d").unwrap();
// Add some default time to convert it into a NaiveDateTime
let naive_datetime: NaiveDateTime = naive_date.and_hms(0,0,0);
// Add a timezone to the object to convert it into a DateTime<UTC>
let datetime_utc = DateTime::<Utc>::from_utc(naive_datetime, Utc);
Пример кода игровой площадки: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=d2b83b3980a5f8fb2e798271766b4541