001 /**************************************************************** 002 * Licensed to the Apache Software Foundation (ASF) under one * 003 * or more contributor license agreements. See the NOTICE file * 004 * distributed with this work for additional information * 005 * regarding copyright ownership. The ASF licenses this file * 006 * to you under the Apache License, Version 2.0 (the * 007 * "License"); you may not use this file except in compliance * 008 * with the License. You may obtain a copy of the License at * 009 * * 010 * http://www.apache.org/licenses/LICENSE-2.0 * 011 * * 012 * Unless required by applicable law or agreed to in writing, * 013 * software distributed under the License is distributed on an * 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * 015 * KIND, either express or implied. See the License for the * 016 * specific language governing permissions and limitations * 017 * under the License. * 018 ****************************************************************/ 019 020 package org.apache.james.mime4j.field.datetime; 021 022 import java.util.Calendar; 023 import java.util.Date; 024 import java.util.GregorianCalendar; 025 import java.util.TimeZone; 026 027 public class DateTime { 028 private final Date date; 029 private final int year; 030 private final int month; 031 private final int day; 032 private final int hour; 033 private final int minute; 034 private final int second; 035 private final int timeZone; 036 037 public DateTime(String yearString, int month, int day, int hour, int minute, int second, int timeZone) { 038 this.year = convertToYear(yearString); 039 this.date = convertToDate(year, month, day, hour, minute, second, timeZone); 040 this.month = month; 041 this.day = day; 042 this.hour = hour; 043 this.minute = minute; 044 this.second = second; 045 this.timeZone = timeZone; 046 } 047 048 private int convertToYear(String yearString) { 049 int year = Integer.parseInt(yearString); 050 switch (yearString.length()) { 051 case 1: 052 case 2: 053 if (year >= 0 && year < 50) 054 return 2000 + year; 055 else 056 return 1900 + year; 057 case 3: 058 return 1900 + year; 059 default: 060 return year; 061 } 062 } 063 064 public static Date convertToDate(int year, int month, int day, int hour, int minute, int second, int timeZone) { 065 Calendar c = new GregorianCalendar(TimeZone.getTimeZone("GMT+0")); 066 c.set(year, month - 1, day, hour, minute, second); 067 c.set(Calendar.MILLISECOND, 0); 068 069 if (timeZone != Integer.MIN_VALUE) { 070 int minutes = ((timeZone / 100) * 60) + timeZone % 100; 071 c.add(Calendar.MINUTE, -1 * minutes); 072 } 073 074 return c.getTime(); 075 } 076 077 public Date getDate() { 078 return date; 079 } 080 081 public int getYear() { 082 return year; 083 } 084 085 public int getMonth() { 086 return month; 087 } 088 089 public int getDay() { 090 return day; 091 } 092 093 public int getHour() { 094 return hour; 095 } 096 097 public int getMinute() { 098 return minute; 099 } 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 }