/**
* KTH Developed by Java
*
* @Copyright 2011 by Service Platform Development Team, KTH, Inc. All rights reserved.
*
* This software is the confidential and proprietary information of KTH, Inc.
* You shall not disclose such Confidential Information and shall use it only
* in accordance with the terms of the license agreement you entered into with KTH.
*/
package com.kth.common.utils;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
public class ISO8601Util {
public static String now() {
return getISO9601FromCalendar(GregorianCalendar.getInstance());
}
public static String getISO9601FromCalendar(final Calendar calendar) {
Date date = calendar.getTime();
String formatted = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.getDefault())
.format(date);
return formatted.substring(0, 26) + ":" + formatted.substring(26);
}
public static Calendar getCalendarFromISO8601(final String iso8601string) throws ParseException {
Calendar calendar = GregorianCalendar.getInstance();
String s = iso8601string.replace("Z", "+00:00");
try {
s = s.substring(0, 26) + s.substring(27);
} catch (IndexOutOfBoundsException e) {
throw new ParseException("Invalid length", 0);
}
Date date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.getDefault())
.parse(s);
calendar.setTime(date);
return calendar;
}
public static String getISO8601FromUnixTime(final long millis) {
Calendar calendar = GregorianCalendar.getInstance();
calendar.setTimeInMillis(millis);
return getISO9601FromCalendar(calendar);
}
public static long getUnixTimeFromISO8601(final String iso8601string) throws ParseException {
Calendar calendar = GregorianCalendar.getInstance();
String s = iso8601string.replace("Z", "+00:00");
if (iso8601string.length() <= 22) {
try {
s = s.substring(0, 19) + s.substring(20);
} catch (IndexOutOfBoundsException e) {
throw new ParseException("Invalid length", 0);
}
Date date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZ", Locale.getDefault()).parse(s);
calendar.setTime(date);
} else if (iso8601string.length() <= 25) {
try {
s = s.substring(0, 22) + s.substring(23);
} catch (IndexOutOfBoundsException e) {
throw new ParseException("Invalid length", 0);
}
Date date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.getDefault())
.parse(s);
calendar.setTime(date);
} else {
try {
s = s.substring(0, 26) + s.substring(27);
} catch (IndexOutOfBoundsException e) {
throw new ParseException("Invalid length", 0);
}
Date date = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.getDefault())
.parse(s);
calendar.setTime(date);
}
return calendar.getTimeInMillis();
}
}