blob: ec0a1160142a42a6109fde1b638ecaf015ca39e5 [file] [log] [blame]
// =================================================================================================
// ADOBE SYSTEMS INCORPORATED
// Copyright 2006 Adobe Systems Incorporated
// All Rights Reserved
//
// NOTICE: Adobe permits you to use, modify, and distribute this file in accordance with the terms
// of the Adobe license agreement accompanying it.
// =================================================================================================
package com.adobe.xmp;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import com.adobe.xmp.impl.XMPDateTimeImpl;
/**
* A factory to create <code>XMPDateTime</code>-instances from a <code>Calendar</code> or an
* ISO 8601 string or for the current time.
*
* @since 16.02.2006
*/
public final class XMPDateTimeFactory
{
/** The UTC TimeZone */
private static final TimeZone UTC = TimeZone.getTimeZone("UTC");
/** Private constructor */
private XMPDateTimeFactory()
{
// EMPTY
}
/**
* Creates an <code>XMPDateTime</code> from a <code>Calendar</code>-object.
*
* @param calendar a <code>Calendar</code>-object.
* @return An <code>XMPDateTime</code>-object.
*/
public static XMPDateTime createFromCalendar(Calendar calendar)
{
return new XMPDateTimeImpl(calendar);
}
/**
* Creates an <code>XMPDateTime</code>-object from initial values.
* @param year years
* @param month months from 1 to 12<br>
* <em>Note:</em> Remember that the month in {@link Calendar} is defined from 0 to 11.
* @param day days
* @param hour hours
* @param minute minutes
* @param second seconds
* @param nanoSecond nanoseconds
* @return Returns an <code>XMPDateTime</code>-object.
*/
public static XMPDateTime create(int year, int month, int day,
int hour, int minute, int second, int nanoSecond)
{
XMPDateTime dt = new XMPDateTimeImpl();
dt.setYear(year);
dt.setMonth(month);
dt.setDay(day);
dt.setHour(hour);
dt.setMinute(minute);
dt.setSecond(second);
dt.setNanoSecond(nanoSecond);
return dt;
}
/**
* Creates an <code>XMPDateTime</code> from an ISO 8601 string.
*
* @param strValue The ISO 8601 string representation of the date/time.
* @return An <code>XMPDateTime</code>-object.
* @throws XMPException When the ISO 8601 string is non-conform
*/
public static XMPDateTime createFromISO8601(String strValue) throws XMPException
{
return new XMPDateTimeImpl(strValue);
}
/**
* Obtain the current date and time.
*
* @return Returns The returned time is UTC, properly adjusted for the local time zone. The
* resolution of the time is not guaranteed to be finer than seconds.
*/
public static XMPDateTime getCurrentDateTime()
{
return new XMPDateTimeImpl(new GregorianCalendar());
}
/**
* Sets the local time zone without touching any other Any existing time zone value is replaced,
* the other date/time fields are not adjusted in any way.
*
* @param dateTime the <code>XMPDateTime</code> variable containing the value to be modified.
* @return Returns an updated <code>XMPDateTime</code>-object.
*/
public static XMPDateTime setLocalTimeZone(XMPDateTime dateTime)
{
Calendar cal = dateTime.getCalendar();
cal.setTimeZone(TimeZone.getDefault());
return new XMPDateTimeImpl(cal);
}
/**
* Make sure a time is UTC. If the time zone is not UTC, the time is
* adjusted and the time zone set to be UTC.
*
* @param dateTime
* the <code>XMPDateTime</code> variable containing the time to
* be modified.
* @return Returns an updated <code>XMPDateTime</code>-object.
*/
public static XMPDateTime convertToUTCTime(XMPDateTime dateTime)
{
long timeInMillis = dateTime.getCalendar().getTimeInMillis();
GregorianCalendar cal = new GregorianCalendar(UTC);
cal.setGregorianChange(new Date(Long.MIN_VALUE));
cal.setTimeInMillis(timeInMillis);
return new XMPDateTimeImpl(cal);
}
/**
* Make sure a time is local. If the time zone is not the local zone, the time is adjusted and
* the time zone set to be local.
*
* @param dateTime the <code>XMPDateTime</code> variable containing the time to be modified.
* @return Returns an updated <code>XMPDateTime</code>-object.
*/
public static XMPDateTime convertToLocalTime(XMPDateTime dateTime)
{
long timeInMillis = dateTime.getCalendar().getTimeInMillis();
// has automatically local timezone
GregorianCalendar cal = new GregorianCalendar();
cal.setTimeInMillis(timeInMillis);
return new XMPDateTimeImpl(cal);
}
}