A rust library for parsing date strings in commonly used formats. Parsed date will be returned as chrono
's DateTime<Utc>
.
Add to your Cargo.toml
:
[dependencies] dateparser = "0.2.1"
And then use dateparser
in your code:
use dateparser::parse; use std::error::Error; fn main() -> Result<(), Box<dyn Error>> { let parsed = parse("6:15pm")?; println!("{:#?}", parsed); Ok(()) }
Or use str
's parse
method:
use dateparser::DateTimeUtc; use std::error::Error; fn main() -> Result<(), Box<dyn Error>> { let parsed = "2021-05-14 18:51 PDT".parse::<DateTimeUtc>()?.0; println!("{:#?}", parsed); Ok(()) }
Convert returned DateTime<Utc>
to pacific time zone datetime with chrono-tz
:
[dependencies] chrono-tz = "0.6.3" dateparser = "0.2.1"
use chrono_tz::US::Pacific; use dateparser::DateTimeUtc; use std::error::Error; fn main() -> Result<(), Box<dyn Error>> { let parsed = "Wed, 02 Jun 2021 06:31:39 GMT".parse::<DateTimeUtc>()?.0; println!("{:#?}", parsed.with_timezone(&Pacific)); Ok(()) }
Parse using a custom timezone offset for a datetime string that doesn't come with a specific timezone:
use dateparser::parse_with_timezone; use chrono::offset::{Local, Utc}; use chrono_tz::US::Pacific; use std::error::Error; fn main() -> Result<(), Box<dyn Error>> { let parsed_in_local = parse_with_timezone("6:15pm", &Local)?; println!("{:#?}", parsed_in_local); let parsed_in_utc = parse_with_timezone("6:15pm", &Utc)?; println!("{:#?}", parsed_in_utc); let parsed_in_pacific = parse_with_timezone("6:15pm", &Pacific)?; println!("{:#?}", parsed_in_pacific); Ok(()) }
Parse with a custom timezone offset and default time when those are not given in datetime string. By default, parse
and parse_with_timezone
uses Utc::now().time()
as default_time
.
use dateparser::parse_with; use chrono::{ offset::{Local, Utc}, naive::NaiveTime, }; use std::error::Error; fn main() -> Result<(), Box<dyn Error>> { let parsed_in_local = parse_with("2021-10-09", &Local, NaiveTime::from_hms(0, 0, 0))?; println!("{:#?}", parsed_in_local); let parsed_in_utc = parse_with("2021-10-09", &Utc, NaiveTime::from_hms(0, 0, 0))?; println!("{:#?}", parsed_in_utc); Ok(()) }
// unix timestamp "1511648546", "1620021848429", "1620024872717915000", // rfc3339 "2021-05-01T01:17:02.604456Z", "2017-11-25T22:34:50Z", // rfc2822 "Wed, 02 Jun 2021 06:31:39 GMT", // postgres timestamp yyyy-mm-dd hh:mm:ss z "2019-11-29 08:08-08", "2019-11-29 08:08:05-08", "2021-05-02 23:31:36.0741-07", "2021-05-02 23:31:39.12689-07", "2019-11-29 08:15:47.624504-08", "2017-07-19 03:21:51+00:00", // yyyy-mm-dd hh:mm:ss "2014-04-26 05:24:37 PM", "2021-04-30 21:14", "2021-04-30 21:14:10", "2021-04-30 21:14:10.052282", "2014-04-26 17:24:37.123", "2014-04-26 17:24:37.3186369", "2012-08-03 18:31:59.257000000", // yyyy-mm-dd hh:mm:ss z "2017-11-25 13:31:15 PST", "2017-11-25 13:31 PST", "2014-12-16 06:20:00 UTC", "2014-12-16 06:20:00 GMT", "2014-04-26 13:13:43 +0800", "2014-04-26 13:13:44 +09:00", "2012-08-03 18:31:59.257000000 +0000", "2015-09-30 18:48:56.35272715 UTC", // yyyy-mm-dd "2021-02-21", // yyyy-mm-dd z "2021-02-21 PST", "2021-02-21 UTC", "2020-07-20+08:00", // hh:mm:ss "01:06:06", "4:00pm", "6:00 AM", // hh:mm:ss z "01:06:06 PST", "4:00pm PST", "6:00 AM PST", "6:00pm UTC", // Mon dd hh:mm:ss "May 6 at 9:24 PM", "May 27 02:45:27", // Mon dd, yyyy, hh:mm:ss "May 8, 2009 5:57:51 PM", "September 17, 2012 10:09am", "September 17, 2012, 10:10:09", // Mon dd, yyyy hh:mm:ss z "May 02, 2021 15:51:31 UTC", "May 02, 2021 15:51 UTC", "May 26, 2021, 12:49 AM PDT", "September 17, 2012 at 10:09am PST", // yyyy-mon-dd "2021-Feb-21", // Mon dd, yyyy "May 25, 2021", "oct 7, 1970", "oct 7, 70", "oct. 7, 1970", "oct. 7, 70", "October 7, 1970", // dd Mon yyyy hh:mm:ss "12 Feb 2006, 19:17", "12 Feb 2006 19:17", "14 May 2019 19:11:40.164", // dd Mon yyyy "7 oct 70", "7 oct 1970", "03 February 2013", "1 July 2013", // mm/dd/yyyy hh:mm:ss "4/8/2014 22:05", "04/08/2014 22:05", "4/8/14 22:05", "04/2/2014 03:00:51", "8/8/1965 12:00:00 AM", "8/8/1965 01:00:01 PM", "8/8/1965 01:00 PM", "8/8/1965 1:00 PM", "8/8/1965 12:00 AM", "4/02/2014 03:00:51", "03/19/2012 10:11:59", "03/19/2012 10:11:59.3186369", // mm/dd/yyyy "3/31/2014", "03/31/2014", "08/21/71", "8/1/71", // yyyy/mm/dd hh:mm:ss "2014/4/8 22:05", "2014/04/08 22:05", "2014/04/2 03:00:51", "2014/4/02 03:00:51", "2012/03/19 10:11:59", "2012/03/19 10:11:59.3186369", // yyyy/mm/dd "2014/3/31", "2014/03/31", // mm.dd.yyyy "3.31.2014", "03.31.2014", "08.21.71", // yyyy.mm.dd "2014.03.30", "2014.03", // yymmdd hh:mm:ss mysql log "171113 14:14:20", // chinese yyyy mm dd hh mm ss "2014年04月08日11时25分18秒", // chinese yyyy mm dd "2014年04月08日",