1 2 // 3 // Copyright (c) 2010-2023 Antmicro 4 // 5 // This file is licensed under the MIT License. 6 // Full license text is available in 'licenses/MIT.txt'. 7 // 8 using System; 9 10 namespace Antmicro.Renode.Peripherals.Timers 11 { 12 public class DateTimeWithCustomWeekday 13 { FromDateTime(DateTime dt)14 public static DateTimeWithCustomWeekday FromDateTime(DateTime dt) 15 { 16 return new DateTimeWithCustomWeekday 17 { 18 currentTime = dt 19 }; 20 } 21 AddSeconds(int s)22 public void AddSeconds(int s) 23 { 24 currentTime = currentTime.AddSeconds(s); 25 } 26 27 public int Second 28 { 29 get => currentTime.Second; 30 set 31 { 32 if(value < 0 || value > 59) 33 { 34 throw new ArgumentException($"Seconds value out of range: {value}"); 35 } 36 37 currentTime = new DateTime(Year, Month, Day, Hour, Minute, value); 38 } 39 } 40 41 public int Minute 42 { 43 get => currentTime.Minute; 44 set 45 { 46 if(value < 0 || value > 59) 47 { 48 throw new ArgumentException($"Minutes value out of range: {value}"); 49 } 50 51 currentTime = new DateTime(Year, Month, Day, Hour, value, Second); 52 } 53 } 54 55 public int Hour 56 { 57 get => currentTime.Hour; 58 set 59 { 60 if(value < 0 || value > 23) 61 { 62 throw new ArgumentException($"Hours value out of range: {value}"); 63 } 64 65 currentTime = new DateTime(Year, Month, Day, value, Minute, Second); 66 } 67 } 68 69 public int Day 70 { 71 get => currentTime.Day; 72 set 73 { 74 if(value < 1 || value > 31) 75 { 76 throw new ArgumentException($"Day value out of range: {value}"); 77 } 78 79 currentTime = new DateTime(Year, Month, value, Hour, Minute, Second); 80 UpdateWeekdayOffset(); 81 } 82 } 83 84 public int Month 85 { 86 get => currentTime.Month; 87 set 88 { 89 if(value < 1 || value > 12) 90 { 91 throw new ArgumentException($"Month value out of range: {value}"); 92 } 93 94 currentTime = new DateTime(Year, value, Day, Hour, Minute, Second); 95 UpdateWeekdayOffset(); 96 } 97 } 98 99 public int Year 100 { 101 get => currentTime.Year; 102 set 103 { 104 currentTime = new DateTime(value, Month, Day, Hour, Minute, Second); 105 UpdateWeekdayOffset(); 106 } 107 } 108 109 public DayOfWeek Weekday 110 { 111 get 112 { 113 return currentTime.DayOfWeek - weekdayOffset; 114 } 115 set 116 { 117 currentWeekday = value; 118 UpdateWeekdayOffset(); 119 } 120 } 121 UpdateWeekdayOffset()122 private void UpdateWeekdayOffset() 123 { 124 weekdayOffset = currentTime.DayOfWeek - currentWeekday; 125 } 126 127 private int weekdayOffset; 128 private DayOfWeek currentWeekday; 129 private DateTime currentTime; 130 } 131 } 132