/* * Copyright (c) 2006 Stiftung Deutsches Elektronen-Synchroton, * Member of the Helmholtz Association, (DESY), HAMBURG, GERMANY. * * THIS SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "../AS IS" BASIS. * WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR PARTICULAR PURPOSE AND * NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * THE USE OR OTHER DEALINGS IN THE SOFTWARE. SHOULD THE SOFTWARE PROVE DEFECTIVE * IN ANY RESPECT, THE USER ASSUMES THE COST OF ANY NECESSARY SERVICING, REPAIR OR * CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. * NO USE OF ANY SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. * DESY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, * OR MODIFICATIONS. * THE FULL LICENSE SPECIFYING FOR THE SOFTWARE THE REDISTRIBUTION, MODIFICATION, * USAGE AND OTHER RIGHTS AND OBLIGATIONS IS INCLUDED WITH THE DISTRIBUTION OF THIS * PROJECT IN THE FILE LICENSE.HTML. IF THE LICENSE IS NOT INCLUDED YOU MAY FIND A COPY * AT HTTP://WWW.DESY.DE/LEGAL/LICENSE.HTM */ package org.csstudio.data.values; import java.util.Calendar; import java.util.Date; import org.csstudio.data.values.internal.Timestamp; /** A factory for {@link ITimestamp} time stamps. * @author Sven Wende * @author Kay Kasemir */ public final class TimestampFactory { /** Private constructor to prevent instantiation. */ private TimestampFactory() { /* NOP */ } /** Creates a time stamp based on the specified seconds and nanoseconds. * <p> * Refer to {@link ITimestamp} for details on epoch etc. * <p> * The nanoseconds will get normalized, i.e. it's OK to * provide nanoseconds that amount to seconds. * <p> * @param seconds Seconds since 1970 epoch * @param nanoseconds Nanoseconds within the seconds * @return New time stamp */ public static ITimestamp createTimestamp(final long seconds, final long nanoseconds) { return new Timestamp(seconds, nanoseconds); } /** Creates a time stamp for the current system time. * @return Time stamp set to the current system time */ public static ITimestamp now() { return fromMillisecs(new Date().getTime()); } /** Creates a time stamp based on the specified seconds. * <p> * Refer to {@link ITimestamp} for details on epoch etc. * <p> * @param seconds Seconds since 1970 epoch * @return New time stamp */ public static ITimestamp fromDouble(final double seconds) { return new Timestamp(seconds); } /** Create a time stamp for the given Calendar. * @param calendar Calendar value to convert into time stamp * @return Time stamp set to given Calendar value. */ public static ITimestamp fromCalendar(final Calendar calendar) { return fromMillisecs(calendar.getTimeInMillis()); } /** Create a time stamp for the given milliseconds since the epoch. * @param millisecs Milliseconds since 1970 epoch * @return Time stamp set to given milliseconds. */ public static ITimestamp fromMillisecs(long millisecs) { final long secs = millisecs / Timestamp.millis_per_sec; millisecs -= secs * Timestamp.millis_per_sec; final long nano = millisecs * Timestamp.nanos_per_milli; return new Timestamp(secs, nano); } /** Convert SQL Timestamp into CSS Timestamp. * @param time SQL Timestamp * @return CSS ITimestamp */ public static ITimestamp fromSQLTimestamp(final java.sql.Timestamp sql_time) { final long millisecs = sql_time.getTime(); final long seconds = millisecs/1000; final long nanoseconds = sql_time.getNanos(); return createTimestamp(seconds, nanoseconds); } }