xref: /DragonReach/src/time/calandar/mod.rs (revision 2069cc0dc0984a2981454b00316ba607f88ac512)
1 //use crate::error::parse_error::ParseError;
2 
3 #[derive(Debug, Default, Clone)]
4 pub struct CalendarComponent {
5     // start: usize,
6     // stop: usize,
7     // repeat: usize,
8     // next: Arc<CalendarComponent>,//暂时不清楚为什么要链式设计
9 }
10 #[derive(Debug, Default, Clone)]
11 pub struct CalendarStandard {
12     //@brief 星期几
13     // weekdays_bits: Vec<WeekdayBits>,
14     // year: usize,
15     // month:  usize,
16     // day: usize,
17     // hour: usize,
18     // minute: usize,
19     // microsecond: usize,
20     // end_of_month: bool,
21     // utc: bool,//是否使用协调世界时(UTC),暂未实现
22     // dst: usize,//夏令时的偏移量,暂未实现
23     // timezone: String,//表示时区的名称,暂未实现
24 }
25 
26 // 使用枚举而不是结构体来模拟C的复杂成员
27 
28 //
29 //pub fn calendar_standard_to_string(spec: &CalendarStandard)->Result<String,ParseError>{
30 //    unimplemented!()
31 //}
32 //pub fn calendar_standard_from_string(spec: &CalendarStandard)->Result<String,ParseError>{
33 //    unimplemented!()
34 //}
35 
36 //@brief 解析日历格式,目前功能较弱,只能识别例如 Mon,Tue,Wed 2004-06-10 12:00:00的格式,
37 // 且暂不支持"*",
38 // pub fn parse_calendar(s: &str) -> Result<CalendarStandard, String> {
39 //     // Weekbits YYYY-MM-DD HH:mm:SS ,目前只支持Weekbits用","隔开
40 
41 // //      OnCalendar=*-*-* 00:00:00:每天的午夜触发。
42 // //      OnCalendar=*-*-* 08:00:00:每天早上8点触发。
43 // //      OnCalendar=Mon,Tue,Wed *-*-* 12:00:00:每周一、周二和周三的中午12点触发。
44 // //      OnCalendar=*-*-1 00:00:00:每个月的第一天午夜触发。
45 // //      OnCalendar=2019-01-01 00:00:00:指定的日期(2019年1月1日)触发。
46 //     let parts: Vec<&str> = s.split_whitespace().collect();
47 
48 //      if parts.len() < 2 || parts.len() > 3 {
49 //          return Err("Invalid calendar format".to_string());
50 //      }
51 //      let mut index:usize=0;
52 
53 //     let mut calendar = CalendarStandard {
54 //         weekdays_bits: Vec::default(),
55 //         year: 0,
56 //         month: 0,
57 //         day: 0,
58 //         hour: 0,
59 //         minute: 0,
60 //         microsecond: 0,
61 //         // end_of_month: false,
62 //         // utc: false,
63 //         // dst: 0,
64 //         // timezone: String::new(),
65 //     };
66 
67 //     // 解析字符串并填充 calendar 结构体的字段
68 //     // 注意:这里的解析逻辑仅供示例,实际情况可能需要更复杂的处理
69 
70 //     // 解析Weekbits
71 //     if parts.len() == 3 {
72 //         for day in parts[index].split(",") {
73 //             match day.trim() {
74 //                 "Mon" =>  calendar.weekdays_bits.push(WeekdayBits::Mon),
75 //                 "Tue" =>  calendar.weekdays_bits.push(WeekdayBits::Tue),
76 //                 "Wed" =>  calendar.weekdays_bits.push(WeekdayBits::Wed),
77 //                 "Thu" =>  calendar.weekdays_bits.push(WeekdayBits::Thu),
78 //                 "Fri" =>  calendar.weekdays_bits.push(WeekdayBits::Fri),
79 //                 "Sat" =>  calendar.weekdays_bits.push(WeekdayBits::Sat),
80 //                 "Sun" =>  calendar.weekdays_bits.push(WeekdayBits::Sun),
81 //                 _ => return Err("Invalid weekday".to_string()),
82 //             }
83 //         }
84 //         index+=1;
85 //     }
86 //       // 解析YYYY-MM-DD
87 //       let mut iter = parts[index].split("-");
88 
89 //       let year = iter.next().unwrap().parse::<i32>().unwrap(); // 提取年并转换为i32类型
90 //       let month = iter.next().unwrap().parse::<i32>().unwrap(); // 提取月并转换为i32类型
91 //       let day = iter.next().unwrap().parse::<i32>().unwrap(); // 提取日并转换为i32类型
92 //       index+=1;
93 
94 //       //解析HH:mm:SS
95 //       let mut iter = parts[index].split(":");
96 
97 //       let year = iter.next().unwrap().parse::<i32>().unwrap(); // 提取年并转换为i32类型
98 //       let month = iter.next().unwrap().parse::<i32>().unwrap(); // 提取月并转换为i32类型
99 //       let day = iter.next().unwrap().parse::<i32>().unwrap(); // 提取日并转换为i32类型
100 
101 //     Ok(calendar)
102 // }
103