diff --git a/src/basics.md b/src/basics.md
index 8a705ab..9d7a2d1 100644
--- a/src/basics.md
+++ b/src/basics.md
@@ -28,6 +28,7 @@
| [Obtain backtrace of complex error scenarios][ex-error-chain-backtrace] | [![error-chain-badge]][error-chain] | [![cat-rust-patterns-badge]][cat-rust-patterns] |
| [Measure elapsed time][ex-measure-elapsed-time] | [![std-badge]][std] | [![cat-time-badge]][cat-time] |
| [Display formatted date and time][ex-format-datetime] | [![chrono-badge]][chrono] | [![cat-date-and-time-badge]][cat-date-and-time] |
+| [Parse string into DateTime struct][ex-parse-datetime] | [![chrono-badge]][chrono] | [![cat-date-and-time-badge]][cat-date-and-time] |
[ex-std-read-lines]: #ex-std-read-lines
@@ -1288,6 +1289,60 @@ fn main() {
}
```
+[ex-parse-datetime]: #ex-parse-datetime
+
+## Parse string into DateTime struct
+[![chrono-badge]][chrono] [![cat-date-and-time-badge]][cat-date-and-time]
+
+Parses a [`DateTime`] struct from strings representing the well-known formats
+[RFC 2822], [RFC 3339], and a custom format, using
+[`DateTime::parse_from_rfc2822`], [`DateTime::parse_from_rfc3339`], and
+[`DateTime::parse_from_str`] respectively.
+
+Escape sequences that are available for the [`DateTime::parse_from_str`] can be
+found at [`chrono::format::strftime`]. Note that the [`DateTime::parse_from_str`]
+requires that such a DateTime struct must be creatable that it uniquely
+identifies a date and a time. For parsing dates and times without timezones use
+[`NaiveDate`], [`NaiveTime`], and [`NaiveDateTime`].
+
+```rust
+extern crate chrono;
+# #[macro_use]
+# extern crate error_chain;
+#
+use chrono::{DateTime, NaiveDate, NaiveDateTime, NaiveTime};
+#
+# error_chain! {
+# foreign_links {
+# DateParse(chrono::format::ParseError);
+# }
+# }
+
+fn run() -> Result<()> {
+ let rfc2822 = DateTime::parse_from_rfc2822("Tue, 1 Jul 2003 10:52:37 +0200")?;
+ println!("{}", rfc2822);
+
+ let rfc3339 = DateTime::parse_from_rfc3339("1996-12-19T16:39:57-08:00")?;
+ println!("{}", rfc3339);
+
+ let custom = DateTime::parse_from_str("5.8.1994 8:00 am +0000", "%d.%m.%Y %H:%M %P %z")?;
+ println!("{}", custom);
+
+ let time_only = NaiveTime::parse_from_str("23:56:04", "%H:%M:%S")?;
+ println!("{}", time_only);
+
+ let date_only = NaiveDate::parse_from_str("2015-09-05", "%Y-%m-%d")?;
+ println!("{}", date_only);
+
+ let no_timezone = NaiveDateTime::parse_from_str("2015-09-05 23:56:04", "%Y-%m-%d %H:%M:%S")?;
+ println!("{}", no_timezone);
+
+ Ok(())
+}
+#
+# quick_main!(run);
+```
+
{{#include links.md}}
@@ -1298,10 +1353,18 @@ fn main() {
[`BufRead`]: https://doc.rust-lang.org/std/io/trait.BufRead.html
[`BufReader`]: https://doc.rust-lang.org/std/io/struct.BufReader.html
[`chain_err`]: https://docs.rs/error-chain/*/error_chain/index.html#chaining-errors
+[`chrono::format::strftime`]: https://docs.rs/chrono/*/chrono/format/strftime/index.html
[`Command`]: https://doc.rust-lang.org/std/process/struct.Command.html
[`DateTime::format`]: https://docs.rs/chrono/*/chrono/struct.DateTime.html#method.format
+[`DateTime::format`]: https://docs.rs/chrono/*/chrono/struct.DateTime.html#method.format
+[`DateTime::parse_from_rfc2822`]: https://docs.rs/chrono/*/chrono/struct.DateTime.html#method.parse_from_rfc2822
+[`DateTime::parse_from_rfc3339`]: https://docs.rs/chrono/*/chrono/struct.DateTime.html#method.parse_from_rfc3339
+[`DateTime::parse_from_str`]: https://docs.rs/chrono/*/chrono/struct.DateTime.html#method.parse_from_str
+[`DateTime::to_rfc2822`]: https://docs.rs/chrono/*/chrono/struct.DateTime.html#method.to_rfc2822
[`DateTime::to_rfc2822`]: https://docs.rs/chrono/*/chrono/struct.DateTime.html#method.to_rfc2822
[`DateTime::to_rfc3339`]: https://docs.rs/chrono/*/chrono/struct.DateTime.html#method.to_rfc3339
+[`DateTime::to_rfc3339`]: https://docs.rs/chrono/*/chrono/struct.DateTime.html#method.to_rfc3339
+[`DateTime`]: https://docs.rs/chrono/*/chrono/struct.DateTime.html
[`digest::Context`]: https://docs.rs/ring/*/ring/digest/struct.Context.html
[`digest::Digest`]: https://docs.rs/ring/*/ring/digest/struct.Digest.html
[`Display`]: https://doc.rust-lang.org/std/fmt/trait.Display.html
@@ -1316,6 +1379,9 @@ fn main() {
[`Mmap::map`]: https://docs.rs/memmap/*/memmap/struct.Mmap.html#method.map
[`Mutex`]: https://doc.rust-lang.org/std/sync/struct.Mutex.html
[`MutexGuard`]: https://doc.rust-lang.org/std/sync/struct.MutexGuard.html
+[`NaiveDate`]: https://docs.rs/chrono/*/chrono/naive/struct.NaiveDate.html
+[`NaiveDateTime`]: https://docs.rs/chrono/*/chrono/naive/struct.NaiveDateTime.html
+[`NaiveTime`]: https://docs.rs/chrono/*/chrono/naive/struct.NaiveTime.html
[`Normal`]: https://doc.rust-lang.org/rand/rand/distributions/normal/struct.Normal.html
[`num_cpus::get`]: https://docs.rs/num_cpus/*/num_cpus/fn.get.html
[`Output`]: https://doc.rust-lang.org/std/process/struct.Output.html
diff --git a/src/intro.md b/src/intro.md
index cc4b94e..7a53f51 100644
--- a/src/intro.md
+++ b/src/intro.md
@@ -46,6 +46,7 @@ community. It needs and welcomes help. For details see
| [Obtain backtrace of complex error scenarios][ex-error-chain-backtrace] | [![error-chain-badge]][error-chain] | [![cat-rust-patterns-badge]][cat-rust-patterns] |
| [Measure elapsed time][ex-measure-elapsed-time] | [![std-badge]][std] | [![cat-time-badge]][cat-time] |
| [Display formatted date and time][ex-format-datetime] | [![chrono-badge]][chrono] | [![cat-date-and-time-badge]][cat-date-and-time] |
+| [Parse string into DateTime struct][ex-parse-datetime] | [![chrono-badge]][chrono] | [![cat-date-and-time-badge]][cat-date-and-time] |
## [Encoding](encoding.html)
@@ -193,8 +194,10 @@ community. It needs and welcomes help. For details see
[ex-log-timestamp]: logging.html#ex-log-timestamp
[ex-measure-elapsed-time]: basics.html#ex-measure-elapsed-time
[ex-paginated-api]: net.html#ex-paginated-api
+[ex-parse-datetime]: basics.html#ex-parse-datetime
[ex-parse-subprocess-input]: basics.html#ex-parse-subprocess-input
[ex-parse-subprocess-output]: basics.html#ex-parse-subprocess-output
+[ex-parse-subprocess-output]: basics.html#ex-parse-subprocess-output
[ex-pbkdf2]: basics.html#ex-pbkdf2
[ex-percent-encode]: encoding.html#ex-percent-encode
[ex-phone]: basics.html#ex-phone