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
52
53
54
55
56
extern crate chrono;

use chrono::{FixedOffset, Local, Utc};

pub enum DnT<T> {
    Local,
    ZoneEast(T),
    ZoneWest(T),
}
impl DnT<f64> {
    pub fn date(time_difference: DnT<f64>) -> String {
        match time_difference {
            DnT::Local => Local::now().format("%d-%m-%Y").to_string(),
            DnT::ZoneEast(time_difference) => Utc::now()
                .date()
                .with_timezone(&FixedOffset::east((time_difference * 1800.0 * 2.0) as i32))
                .format("%d-%m-%Y")
                .to_string(),
            DnT::ZoneWest(time_difference) => Utc::now()
                .date()
                .with_timezone(&FixedOffset::west((time_difference * 1800.0 * 2.0) as i32))
                .format("%d-%m-%Y")
                .to_string(),
        }
    }

    pub fn time(time_difference: DnT<f64>) -> String {
        match time_difference {
            DnT::Local => Local::now().format("%H:%M:%S").to_string(),
            DnT::ZoneEast(time_difference) => Utc::now()
                .with_timezone(&FixedOffset::east((time_difference * 1800.0 * 2.0) as i32))
                .time()
                .format("%H:%M:%S")
                .to_string(),
            DnT::ZoneWest(time_difference) => Utc::now()
                .with_timezone(&FixedOffset::west((time_difference * 1800.0 * 2.0) as i32))
                .time()
                .format("%H:%M:%S")
                .to_string(),
        }
    }

    pub fn dateandtime(time_difference: DnT<f64>) -> String {
        match time_difference {
            DnT::Local => Local::now().format("%d-%m-%Y %H:%M:%S").to_string(),
            DnT::ZoneEast(time_difference) => Utc::now()
                .with_timezone(&FixedOffset::east((time_difference * 1800.0 * 2.0) as i32))
                .format("%d-%m-%Y %H:%M:%S")
                .to_string(),
            DnT::ZoneWest(time_difference) => Utc::now()
                .with_timezone(&FixedOffset::west((time_difference * 1800.0 * 2.0) as i32))
                .format("%d-%m-%Y %H:%M:%S")
                .to_string(),
        }
    }
}