blob: 506ff54e5d788276b8ff89855a44e1562884b491 [file] [log] [blame]
/****************************************************************
* 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 org.apache.james.mime4j.field.datetime.parser.DateTimeParser;
import org.apache.james.mime4j.field.datetime.parser.ParseException;
import org.apache.james.mime4j.field.datetime.parser.TokenMgrError;
import java.util.Date;
import java.util.Calendar;
import java.util.TimeZone;
import java.util.GregorianCalendar;
import java.io.StringReader;
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(getYear() + " " + getMonth() + " " + getDay() + "; " + getHour() + " " + getMinute() + " " + getSecond() + " " + getTimeZone());
}
public static DateTime parse(String dateString) throws ParseException {
try {
return new DateTimeParser(new StringReader(dateString)).parseAll();
}
catch (TokenMgrError err) {
throw new ParseException(err.getMessage());
}
}
}