diff options
Diffstat (limited to 'XMPCore/src/com/adobe/xmp/XMPDateTimeFactory.java')
-rw-r--r-- | XMPCore/src/com/adobe/xmp/XMPDateTimeFactory.java | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/XMPCore/src/com/adobe/xmp/XMPDateTimeFactory.java b/XMPCore/src/com/adobe/xmp/XMPDateTimeFactory.java new file mode 100644 index 0000000..ec0a116 --- /dev/null +++ b/XMPCore/src/com/adobe/xmp/XMPDateTimeFactory.java @@ -0,0 +1,153 @@ +// ================================================================================================= +// 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); + } +}
\ No newline at end of file |