1f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling// =================================================================================================
2f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling// ADOBE SYSTEMS INCORPORATED
3f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling// Copyright 2006 Adobe Systems Incorporated
4f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling// All Rights Reserved
5f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling//
6f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling// NOTICE:  Adobe permits you to use, modify, and distribute this file in accordance with the terms
7f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling// of the Adobe license agreement accompanying it.
8f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling// =================================================================================================
9f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
10f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberlingpackage com.adobe.xmp;
11f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
12f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberlingimport java.util.Calendar;
13f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberlingimport java.util.TimeZone;
14f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
15f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
16f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling/**
17f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * The <code>XMPDateTime</code>-class represents a point in time up to a resolution of nano
18f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * seconds. Dates and time in the serialized XMP are ISO 8601 strings. There are utility functions
19f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * to convert to the ISO format, a <code>Calendar</code> or get the Timezone. The fields of
20f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * <code>XMPDateTime</code> are:
21f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * <ul>
22f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * <li> month - The month in the range 1..12.
23f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * <li> day - The day of the month in the range 1..31.
24f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * <li> minute - The minute in the range 0..59.
25f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * <li> hour - The time zone hour in the range 0..23.
26f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * <li> minute - The time zone minute in the range 0..59.
27f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * <li> nanoSecond - The nano seconds within a second. <em>Note:</em> if the XMPDateTime is
28f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * converted into a calendar, the resolution is reduced to milli seconds.
29f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * <li> timeZone - a <code>TimeZone</code>-object.
30f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * </ul>
31f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * DateTime values are occasionally used in cases with only a date or only a time component. A date
32f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * without a time has zeros for all the time fields. A time without a date has zeros for all date
33f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling * fields (year, month, and day).
34f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling */
35f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberlingpublic interface XMPDateTime extends Comparable
36f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling{
37f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** @return Returns the year, can be negative. */
38f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	int getYear();
39f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
40f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** @param year Sets the year */
41f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	void setYear(int year);
42f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
43f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** @return Returns The month in the range 1..12. */
44f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	int getMonth();
45f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
46f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** @param month Sets the month 1..12 */
47f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	void setMonth(int month);
48f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
49f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** @return Returns the day of the month in the range 1..31. */
50f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	int getDay();
51f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
52f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** @param day Sets the day 1..31 */
53f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	void setDay(int day);
54f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
55f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** @return Returns hour - The hour in the range 0..23. */
56f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	int getHour();
57f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
58f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** @param hour Sets the hour in the range 0..23. */
59f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	void setHour(int hour);
60f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
61f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** @return Returns the minute in the range 0..59. */
62f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	int getMinute();
63f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
64f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** @param minute Sets the minute in the range 0..59. */
65f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	void setMinute(int minute);
66f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
67f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** @return Returns the second in the range 0..59. */
68f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	int getSecond();
69f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
70f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** @param second Sets the second in the range 0..59. */
71f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	void setSecond(int second);
72f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
73f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
74f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns milli-, micro- and nano seconds.
75f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * 		   Nanoseconds within a second, often left as zero?
76f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
77f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	int getNanoSecond();
78f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
79f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
80f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @param nanoSecond Sets the milli-, micro- and nano seconds.
81f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 *		Granularity goes down to milli seconds.
82f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
83f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	void setNanoSecond(int nanoSecond);
84f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
85f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** @return Returns the time zone. */
86f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	TimeZone getTimeZone();
87f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
88f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/** @param tz a time zone to set */
89f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	void setTimeZone(TimeZone tz);
90f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
91f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
92f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns a <code>Calendar</code> (only with milli second precision). <br>
93f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 *  		<em>Note:</em> the dates before Oct 15th 1585 (which normally fall into validity of
94f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 *  		the Julian calendar) are also rendered internally as Gregorian dates.
95f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
96f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	Calendar getCalendar();
97f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling
98f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	/**
99f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 * @return Returns the ISO 8601 string representation of the date and time.
100f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	 */
101f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling	String getISO8601String();
102f12f744843a67c910ec325fc6dfa73988f67b97cSascha Haeberling}