-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCreateCal.java
134 lines (106 loc) · 4.82 KB
/
CreateCal.java
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
import java.util.Calendar;
import java.util.Date;
import java.text.SimpleDateFormat;
public class CreateCal {
public static void main(String[] args) throws Exception {
Semester s2022_1 = new Semester("26/09/2022", "02/12/2022");
Semester s2022_2 = new Semester("09/01/2023", "17/03/2023");
Semester s2022_3 = new Semester("17/04/2023", "23/06/2023");
Semester s2023_1 = new Semester("18/09/2023", "02/02/2024", "18/12/2023", "05/01/2024", 6);
Semester s2023_2 = new Semester("05/02/2024", "07/06/2024", "25/03/2024", "05/04/2024");
Semester s2024_1 = new Semester("16/09/2024", "31/01/2025", "16/12/2024", "03/01/2025", 6);
Semester s2024_2 = new Semester("03/02/2025", "06/06/2025", "07/04/2025", "18/04/2025");
Semester s2025_1 = new Semester("15/09/2025", "30/01/2026", "15/12/2025", "02/01/2026", 6);
Semester s2025_2 = new Semester("02/02/2026", "05/06/2026", "30/03/2026", "10/04/2026");
Semester s2026_1 = new Semester("21/09/2026", "05/02/2027", "21/12/2026", "08/01/2027", 6);
Semester s2026_2 = new Semester("08/02/2027", "11/06/2027", "22/03/2027", "02/04/2027");
//System.out.println(s2022_1);
System.out.print(Semester.iCalHeader());
System.out.print(s2022_1);
System.out.print(s2022_2);
System.out.print(s2022_3);
System.out.print(s2023_1);
System.out.print(s2023_2);
System.out.print(s2024_1);
System.out.print(s2024_2);
System.out.print(s2025_1);
System.out.print(s2025_2);
System.out.print(s2026_1);
System.out.print(s2026_2);
System.out.print(Semester.iCalFooter());
}
}
class Semester {
private static SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
private static SimpleDateFormat icf = new SimpleDateFormat("yyyyMMdd"); // format for iCal
Date start_date;
Date end_date;
Date vacation_start;
Date vacation_end;
int week_num_start = 0; // This is 1 for terms, 0 for semesters
int cons_week = -1; // which week is consolidation week
int teaching_weeks = 11; // how many teaching weeks are there? (usually 11)
public Semester(String s, String e) throws Exception {
this(s, e, "01/01/2000", "01/01/2000", -1);
week_num_start = 1; // assume if only start and end we're talking Terms...
}
public Semester(String s, String e, String v_s, String v_e) throws Exception {
this(s, e, v_s, v_e, -1);
}
public Semester(String s, String e, String v_s, String v_e, int cons_week) throws Exception {
start_date = sdf.parse(s);
end_date = sdf.parse(e);
vacation_start = sdf.parse(v_s);
vacation_end = sdf.parse(v_e);
this.cons_week = cons_week;
}
public String toString() {
Calendar c = Calendar.getInstance();
c.setTime(start_date);
String output = "";
int week_cnt = week_num_start;
int counter = week_num_start;
while (c.getTime().compareTo(end_date) < 0) {
if ((c.getTime().compareTo(vacation_start) >= 0) && (c.getTime().compareTo(vacation_end) <= 0)) {
//output += icf.format(c.getTime()) + " - Vacation Week\n";
} else {
if (counter == cons_week) {
output += toiCalEvent(c.getTime(), "Consolidation Week");
//output += icf.format(c.getTime()) + " - Consolidation Week\n";
} else if (week_cnt > teaching_weeks) {
output += toiCalEvent(c.getTime(), "Assessment Week");
//output += icf.format(c.getTime()) + " - Assessment Week\n";
} else {
output += toiCalEvent(c.getTime(), "Teaching Week " + week_cnt);
//output += icf.format(c.getTime()) + " - Week " + week_cnt + "\n";
week_cnt++;
}
counter++;
}
c.add(Calendar.DAY_OF_MONTH, 7);
}
return output;
}
public static String toiCalEvent(Date d, String title) {
String ret = "BEGIN:VEVENT\n"
+ "DTSTAMP;VALUE=DATE:19760401\n"
+ "DTSTART;VALUE=DATE:" + icf.format(d) + "\n"
+ "CLASS:PUBLIC\n"
+ "SUMMARY;LANGUAGE=en:" + title +"\n"
+ "TRANSP:TRANSPARENT\n"
+ "END:VEVENT\n";
return ret;
}
public static String iCalHeader() {
return "BEGIN:VCALENDAR\n" +
"VERSION:2.0\n" +
"PRODID:icalendar-ruby\n" +
"CALSCALE:GREGORIAN\n" +
"X-WR-CALNAME:University of York - Week Numbers\n" +
"X-APPLE-LANGUAGE:en\n" +
"X-APPLE-REGION:GB\n";
}
public static String iCalFooter() {
return "END:VCALENDAR\n";
}
}