1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
extern crate chrono;

use chrono::NaiveDate;
use chrono::NaiveDateTime;
use chrono::TimeZone;
use chrono::Utc;

static CHRONO_TIME_FORMAT: &str = "%H:%M:%S";
static CHRONO_DATE_FORMAT: &str = "%Y-%m-%d";
static CHRONO_DATE_TIME_FORMAT: &str = "%Y-%m-%d %H:%M:%S";

pub fn get_unix_timestamp_ms() -> i64 {
    let now = Utc::now();
    return now.timestamp();
}

pub fn time_stamp_to_date(time_stamp: i64) -> String {
    let utc = NaiveDateTime::from_timestamp_opt(time_stamp, 0).unwrap();
    let datetime = Utc.from_utc_datetime(&utc);
    let date_str = datetime.format(CHRONO_DATE_FORMAT).to_string();
    return date_str;
}

pub fn time_stamp_to_time(time_stamp: i64) -> String {
    let utc = NaiveDateTime::from_timestamp_opt(time_stamp, 0).unwrap();
    let datetime = Utc.from_utc_datetime(&utc);
    let time_str = datetime.format(CHRONO_TIME_FORMAT).to_string();
    return time_str;
}

pub fn time_stamp_to_date_time(time_stamp: i64) -> String {
    let utc = NaiveDateTime::from_timestamp_opt(time_stamp, 0).unwrap();
    let datetime = Utc.from_utc_datetime(&utc);
    let date_time_str = datetime.format(CHRONO_DATE_TIME_FORMAT).to_string();
    return date_time_str;
}

pub fn date_time_to_time_stamp(date: &str) -> i64 {
    let date_time = NaiveDateTime::parse_from_str(date, CHRONO_DATE_TIME_FORMAT);
    if date_time.is_err() {
        return 0;
    }
    return date_time.ok().unwrap().timestamp();
}

pub fn time_stamp_from_year_and_day(year: i32, day_of_year: u32) -> i64 {
    let date = NaiveDate::from_yo_opt(year, day_of_year).unwrap();
    let datetime = date.and_hms_opt(0, 0, 0).unwrap();
    let time_stamp = Utc.from_utc_datetime(&datetime).timestamp();
    return time_stamp;
}