master
1/**
2 * Assignment 2, COMP268 Class: TrainTimeTable.java
3 *
4 * @description Provides a class to manage a train schedule.
5 * @author: mo khan Student ID: 3431709
6 * @date August 5, 2019
7 * @version 1.0
8 */
9package Q10;
10
11import java.text.*;
12import java.util.*;
13
14public class Station {
15 private Date arrival;
16 private Date departure;
17 private int day;
18 private String city;
19
20 public Station(String city, Date arrival, Date departure, int day) {
21 this.city = city;
22 this.arrival = arrival;
23 this.departure = departure;
24 this.day = day;
25 }
26
27 public Date getArrivalDate() {
28 return this.arrival;
29 }
30
31 public Date getDepartureDate() {
32 return this.departure;
33 }
34
35 public int getDay() {
36 return day;
37 }
38
39 public String getCity() {
40 return this.city;
41 }
42
43 public void setArrivalDate(Date arrival) {
44 this.arrival = arrival;
45 }
46
47 public void setCity(String city) {
48 this.city = city;
49 }
50
51 public void setDay(int day) {
52 this.day = day;
53 }
54
55 public void setDepartureDate(Date departure) {
56 this.departure = departure;
57 }
58
59 public String getArrival() {
60 return formatDate(this.arrival);
61 }
62
63 public String getDeparture() {
64 return formatDate(this.departure);
65 }
66
67 public void delayBy(int minutes) {
68 this.setArrivalDate(advanceDate(this.getArrivalDate(), minutes));
69 this.setDepartureDate(advanceDate(this.getDepartureDate(), minutes));
70
71 Calendar calendar = Calendar.getInstance();
72 calendar.setTime(
73 this.getDepartureDate() != null ? this.getDepartureDate() : this.getArrivalDate());
74 calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
75 this.setDay(calendar.get(Calendar.DAY_OF_MONTH));
76 }
77
78 private String formatDate(Date date) {
79 if (date == null) return "-";
80
81 DateFormat format = new SimpleDateFormat("HH:mm");
82 format.setTimeZone(TimeZone.getTimeZone("UTC"));
83 return format.format(date);
84 }
85
86 private Date advanceDate(Date original, int minutes) {
87 if (original == null) return null;
88
89 return new Date(original.getTime() + (minutes * 60000));
90 }
91}