/* * ModeShape (http://www.modeshape.org) * * Licensed 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.modeshape.jcr.value; import org.modeshape.jcr.api.value.DateTime; /** * A factory for creating {@link DateTime date-time instants}. This interface extends the {@link ValueFactory} generic interface * and adds specific methods for creating instants for the current time (and time zone) as well as various combinations of * individual field values. <h2>ISO-8601</h2> * <p> * The factory creates date-time instants from strings that are in the standard ISO-8601 format. The format this factory supports * is month-based. The month-based representation is the most common format of ISO8601, and is the format used in the XML standards for passing * dates and times: * * <pre> * yyyy-mm-ddTHH:MM:SS.SSSZ * </pre> * * The fields are separated by dashes and consist of: * <ul> * <li>four digit year;</li> * <li>two digit month, where 01 is Janurary and 12 is December;</li> * <li>two digit day of month, from 01 to 31;</li> * <li>two digit hour, from 00 to 23;</li> * <li>two digit minute, from 00 to 59;</li> * <li>two digit second, from 00 to 59;</li> * <li>three decimal places for milliseconds, if required;</li> * <li>time zone offset of the form <code>HH:mm</code> (or '0' if UTC)</li> * </ul> * </p> */ public interface DateTimeFactory extends ValueFactory<DateTime> { @Override DateTimeFactory with( ValueFactories valueFactories ); /** * Create a date-time instance for the current time in the local time zone. * * @return the current date-time instance * @see #createUtc() */ DateTime create(); /** * Create a date-time instance for the current time in UTC. * * @return the current date-time instance (in UTC) * @see #create() */ DateTime createUtc(); /** * Create a date-time instance that is offset from the original by the specified amount. * * @param original the original {@link DateTime} * @param offsetInMillis the offset in milliseconds (positive or negative) * @return the offset date-time instance */ DateTime create( DateTime original, long offsetInMillis ); /** * Create a date-time instance given the individual values for the fields * * @param year the year of the era * @param monthOfYear the month of the year * @param dayOfMonth the day of the month * @param hourOfDay the hour of the day * @param minuteOfHour the minute of the hour * @param secondOfMinute the second of the minute * @param millisecondsOfSecond the milliseconds of the second * @return the date-time instance */ DateTime create( int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minuteOfHour, int secondOfMinute, int millisecondsOfSecond ); }