1 | /**************************************************************** |
---|
2 | * Licensed to the Apache Software Foundation (ASF) under one * |
---|
3 | * or more contributor license agreements. See the NOTICE file * |
---|
4 | * distributed with this work for additional information * |
---|
5 | * regarding copyright ownership. The ASF licenses this file * |
---|
6 | * to you under the Apache License, Version 2.0 (the * |
---|
7 | * "License"); you may not use this file except in compliance * |
---|
8 | * with the License. You may obtain a copy of the License at * |
---|
9 | * * |
---|
10 | * http://www.apache.org/licenses/LICENSE-2.0 * |
---|
11 | * * |
---|
12 | * Unless required by applicable law or agreed to in writing, * |
---|
13 | * software distributed under the License is distributed on an * |
---|
14 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * |
---|
15 | * KIND, either express or implied. See the License for the * |
---|
16 | * specific language governing permissions and limitations * |
---|
17 | * under the License. * |
---|
18 | ****************************************************************/ |
---|
19 | |
---|
20 | package org.apache.james.mime4j.dom.datetime; |
---|
21 | |
---|
22 | import java.util.Calendar; |
---|
23 | import java.util.Date; |
---|
24 | import java.util.GregorianCalendar; |
---|
25 | import java.util.TimeZone; |
---|
26 | |
---|
27 | public class DateTime { |
---|
28 | private final Date date; |
---|
29 | private final int year; |
---|
30 | private final int month; |
---|
31 | private final int day; |
---|
32 | private final int hour; |
---|
33 | private final int minute; |
---|
34 | private final int second; |
---|
35 | private final int timeZone; |
---|
36 | |
---|
37 | public DateTime(String yearString, int month, int day, int hour, int minute, int second, int timeZone) { |
---|
38 | this.year = convertToYear(yearString); |
---|
39 | this.date = convertToDate(year, month, day, hour, minute, second, timeZone); |
---|
40 | this.month = month; |
---|
41 | this.day = day; |
---|
42 | this.hour = hour; |
---|
43 | this.minute = minute; |
---|
44 | this.second = second; |
---|
45 | this.timeZone = timeZone; |
---|
46 | } |
---|
47 | |
---|
48 | private int convertToYear(String yearString) { |
---|
49 | int year = Integer.parseInt(yearString); |
---|
50 | switch (yearString.length()) { |
---|
51 | case 1: |
---|
52 | case 2: |
---|
53 | if (year >= 0 && year < 50) |
---|
54 | return 2000 + year; |
---|
55 | else |
---|
56 | return 1900 + year; |
---|
57 | case 3: |
---|
58 | return 1900 + year; |
---|
59 | default: |
---|
60 | return year; |
---|
61 | } |
---|
62 | } |
---|
63 | |
---|
64 | public static Date convertToDate(int year, int month, int day, int hour, int minute, int second, int timeZone) { |
---|
65 | Calendar c = new GregorianCalendar(TimeZone.getTimeZone("GMT+0")); |
---|
66 | c.set(year, month - 1, day, hour, minute, second); |
---|
67 | c.set(Calendar.MILLISECOND, 0); |
---|
68 | |
---|
69 | if (timeZone != Integer.MIN_VALUE) { |
---|
70 | int minutes = ((timeZone / 100) * 60) + timeZone % 100; |
---|
71 | c.add(Calendar.MINUTE, -1 * minutes); |
---|
72 | } |
---|
73 | |
---|
74 | return c.getTime(); |
---|
75 | } |
---|
76 | |
---|
77 | public Date getDate() { |
---|
78 | return date; |
---|
79 | } |
---|
80 | |
---|
81 | public int getYear() { |
---|
82 | return year; |
---|
83 | } |
---|
84 | |
---|
85 | public int getMonth() { |
---|
86 | return month; |
---|
87 | } |
---|
88 | |
---|
89 | public int getDay() { |
---|
90 | return day; |
---|
91 | } |
---|
92 | |
---|
93 | public int getHour() { |
---|
94 | return hour; |
---|
95 | } |
---|
96 | |
---|
97 | public int getMinute() { |
---|
98 | return minute; |
---|
99 | } |
---|
100 | |
---|
101 | public int getSecond() { |
---|
102 | return second; |
---|
103 | } |
---|
104 | |
---|
105 | public int getTimeZone() { |
---|
106 | return timeZone; |
---|
107 | } |
---|
108 | |
---|
109 | public void print() { |
---|
110 | System.out.println(toString()); |
---|
111 | } |
---|
112 | |
---|
113 | @Override |
---|
114 | public String toString() { |
---|
115 | return getYear() + " " + getMonth() + " " + getDay() + "; " + getHour() + " " + getMinute() + " " + getSecond() + " " + getTimeZone(); |
---|
116 | } |
---|
117 | |
---|
118 | @Override |
---|
119 | public int hashCode() { |
---|
120 | final int PRIME = 31; |
---|
121 | int result = 1; |
---|
122 | result = PRIME * result + ((date == null) ? 0 : date.hashCode()); |
---|
123 | result = PRIME * result + day; |
---|
124 | result = PRIME * result + hour; |
---|
125 | result = PRIME * result + minute; |
---|
126 | result = PRIME * result + month; |
---|
127 | result = PRIME * result + second; |
---|
128 | result = PRIME * result + timeZone; |
---|
129 | result = PRIME * result + year; |
---|
130 | return result; |
---|
131 | } |
---|
132 | |
---|
133 | @Override |
---|
134 | public boolean equals(Object obj) { |
---|
135 | if (this == obj) |
---|
136 | return true; |
---|
137 | if (obj == null) |
---|
138 | return false; |
---|
139 | if (getClass() != obj.getClass()) |
---|
140 | return false; |
---|
141 | final DateTime other = (DateTime) obj; |
---|
142 | if (date == null) { |
---|
143 | if (other.date != null) |
---|
144 | return false; |
---|
145 | } else if (!date.equals(other.date)) |
---|
146 | return false; |
---|
147 | if (day != other.day) |
---|
148 | return false; |
---|
149 | if (hour != other.hour) |
---|
150 | return false; |
---|
151 | if (minute != other.minute) |
---|
152 | return false; |
---|
153 | if (month != other.month) |
---|
154 | return false; |
---|
155 | if (second != other.second) |
---|
156 | return false; |
---|
157 | if (timeZone != other.timeZone) |
---|
158 | return false; |
---|
159 | if (year != other.year) |
---|
160 | return false; |
---|
161 | return true; |
---|
162 | } |
---|
163 | |
---|
164 | |
---|
165 | } |
---|