1 module cif.utils; 2 3 import std.algorithm : filter, map; 4 import std.array : array; 5 import std.conv : to; 6 import std.datetime.date : DayOfWeek, TimeOfDay; 7 import std.range : enumerate; 8 9 package int twoToFourYear(int year) 10 { 11 return year >= 60 ? 1900 + year : 2000 + year; 12 } 13 14 unittest 15 { 16 assert(twoToFourYear(80) == 1980); 17 assert(twoToFourYear(12) == 2012); 18 } 19 20 private DayOfWeek[] weekDays = [ 21 DayOfWeek.mon, DayOfWeek.tue, DayOfWeek.wed, DayOfWeek.thu, DayOfWeek.fri, 22 DayOfWeek.sat, DayOfWeek.sun 23 ]; 24 25 package DayOfWeek[] daysRunning(string days) 26 { 27 return days.enumerate.filter!(a => a.value == '1').map!(a => weekDays[a.index]).array(); 28 } 29 30 unittest 31 { 32 assert(daysRunning("1111100") == [DayOfWeek.mon, DayOfWeek.tue, 33 DayOfWeek.wed, DayOfWeek.thu, DayOfWeek.fri]); 34 35 assert(daysRunning("0000011") == [DayOfWeek.sat, DayOfWeek.sun]); 36 } 37 38 package TimeOfDay parseTime(string time) 39 { 40 int hour = to!int(time[0 .. 2]); 41 int minute = to!int(time[2 .. 4]); 42 43 if (time.length == 4) 44 { 45 return TimeOfDay(hour, minute, 0); 46 } 47 48 return TimeOfDay(hour, minute, time[4] == 'H' ? 30 : 0); 49 } 50 51 unittest 52 { 53 assert(parseTime("1536H") == TimeOfDay(15, 36, 30)); 54 assert(parseTime("1215 ") == TimeOfDay(12, 15, 0)); 55 assert(parseTime("1340") == TimeOfDay(13, 40, 0)); 56 }