/**************************************************************** | |
* Licensed to the Apache Software Foundation (ASF) under one * | |
* or more contributor license agreements. See the NOTICE file * | |
* distributed with this work for additional information * | |
* regarding copyright ownership. The ASF licenses this file * | |
* to you under the Apache License, Version 2.0 (the * | |
* "License"); you may not use this file except in compliance * | |
* with the License. You may obtain a copy of the License at * | |
* * | |
* http://www.apache.org/licenses/LICENSE-2.0 * | |
* * | |
* Unless required by applicable law or agreed to in writing, * | |
* software distributed under the License is distributed on an * | |
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * | |
* KIND, either express or implied. See the License for the * | |
* specific language governing permissions and limitations * | |
* under the License. * | |
****************************************************************/ | |
package org.apache.james.mime4j.field.datetime; | |
import java.util.Calendar; | |
import java.util.Date; | |
import java.util.GregorianCalendar; | |
import java.util.TimeZone; | |
public class DateTime { | |
private final Date date; | |
private final int year; | |
private final int month; | |
private final int day; | |
private final int hour; | |
private final int minute; | |
private final int second; | |
private final int timeZone; | |
public DateTime(String yearString, int month, int day, int hour, int minute, int second, int timeZone) { | |
this.year = convertToYear(yearString); | |
this.date = convertToDate(year, month, day, hour, minute, second, timeZone); | |
this.month = month; | |
this.day = day; | |
this.hour = hour; | |
this.minute = minute; | |
this.second = second; | |
this.timeZone = timeZone; | |
} | |
private int convertToYear(String yearString) { | |
int year = Integer.parseInt(yearString); | |
switch (yearString.length()) { | |
case 1: | |
case 2: | |
if (year >= 0 && year < 50) | |
return 2000 + year; | |
else | |
return 1900 + year; | |
case 3: | |
return 1900 + year; | |
default: | |
return year; | |
} | |
} | |
public static Date convertToDate(int year, int month, int day, int hour, int minute, int second, int timeZone) { | |
Calendar c = new GregorianCalendar(TimeZone.getTimeZone("GMT+0")); | |
c.set(year, month - 1, day, hour, minute, second); | |
c.set(Calendar.MILLISECOND, 0); | |
if (timeZone != Integer.MIN_VALUE) { | |
int minutes = ((timeZone / 100) * 60) + timeZone % 100; | |
c.add(Calendar.MINUTE, -1 * minutes); | |
} | |
return c.getTime(); | |
} | |
public Date getDate() { | |
return date; | |
} | |
public int getYear() { | |
return year; | |
} | |
public int getMonth() { | |
return month; | |
} | |
public int getDay() { | |
return day; | |
} | |
public int getHour() { | |
return hour; | |
} | |
public int getMinute() { | |
return minute; | |
} | |
public int getSecond() { | |
return second; | |
} | |
public int getTimeZone() { | |
return timeZone; | |
} | |
public void print() { | |
System.out.println(toString()); | |
} | |
public String toString() { | |
return getYear() + " " + getMonth() + " " + getDay() + "; " + getHour() + " " + getMinute() + " " + getSecond() + " " + getTimeZone(); | |
} | |
public int hashCode() { | |
final int PRIME = 31; | |
int result = 1; | |
result = PRIME * result + ((date == null) ? 0 : date.hashCode()); | |
result = PRIME * result + day; | |
result = PRIME * result + hour; | |
result = PRIME * result + minute; | |
result = PRIME * result + month; | |
result = PRIME * result + second; | |
result = PRIME * result + timeZone; | |
result = PRIME * result + year; | |
return result; | |
} | |
public boolean equals(Object obj) { | |
if (this == obj) | |
return true; | |
if (obj == null) | |
return false; | |
if (getClass() != obj.getClass()) | |
return false; | |
final DateTime other = (DateTime) obj; | |
if (date == null) { | |
if (other.date != null) | |
return false; | |
} else if (!date.equals(other.date)) | |
return false; | |
if (day != other.day) | |
return false; | |
if (hour != other.hour) | |
return false; | |
if (minute != other.minute) | |
return false; | |
if (month != other.month) | |
return false; | |
if (second != other.second) | |
return false; | |
if (timeZone != other.timeZone) | |
return false; | |
if (year != other.year) | |
return false; | |
return true; | |
} | |
} |