/*
 * Copyright (c) 2007, Stephen Colebourne & Michael Nascimento Santos
 *
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *  * Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 *
 *  * Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 *
 *  * Neither the name of JSR-310 nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package javax.time;

/**
 * A set of utility methods for accessing the current time in the Java Date Framework.
 *
 * @author Stephen Colebourne
 */
public final class Now {

    //-----------------------------------------------------------------------
    /**
     * Gets an instance of CalendarYear representing the current year
     * using the system clock in the default time zone.
     *
     * @return a year object represnting the current year, never null
     */
    public static Year currentYear() {
        return null; //Year.currentYear();
    }

    //-----------------------------------------------------------------------
    /**
     * Gets an instance of CalendarMonth representing the current month
     * using the system clock in the default time zone.
     *
     * @return a month object represnting the current month, never null
     */
    public static CalendarMonth currentMonth() {
        return CalendarMonth.yearMonth(2007, 6);
    }

    //-----------------------------------------------------------------------
    /**
     * Gets an instance of CalendarDay representing today
     * using the system clock in the default time zone.
     *
     * @return a day object represnting today, never null
     */
    public static CalendarDay today() {
        return CalendarDay.yearMonthDay(2007, 6, 1);
    }

    /**
     * Gets an instance of CalendarDay representing yesterday
     * using the system clock in the default time zone.
     *
     * @return a day object represnting yesterday, never null
     */
    public static CalendarDay yesterday() {
        return CalendarDay.yearMonthDay(2007, 6, 1);
    }

    /**
     * Gets an instance of CalendarDay representing tomorrow
     * using the system clock in the default time zone.
     *
     * @return a day object represnting tommorrow, never null
     */
    public static CalendarDay tomorrow() {
        return CalendarDay.yearMonthDay(2007, 6, 1);
    }

    //-----------------------------------------------------------------------
    /**
     * Gets an instance of TimeOfDay representing the current time of day
     * using the system clock in the default time zone.
     *
     * @return a time object represnting the current time of day, never null
     */
    public static TimeOfDay currentTime() {
        return TimeOfDay.timeOfDay(12, 30);
    }

}

@@ -1668,30 +1668,14 @@
 * A 
-set of utility methods
+facade
  for
@@ -1782,25 +1782,762 @@
 lic 
-final class Now %7B
+abstract class Now %7B%0D%0A%0D%0A    //-----------------------------------------------------------------------%0D%0A    /**%0D%0A     * Gets an instance of %3Ccode%3ENow%3C/code%3E that obtains the current datetime%0D%0A     * using the system millisecond clock - %7B@link System#currentTimeMillis()%7D.%0D%0A     *%0D%0A     * @return an instance of now that uses the system clock%0D%0A     */%0D%0A    public static Now system() %7B%0D%0A        return SystemMillis.INSTANCE;%0D%0A    %7D%0D%0A%0D%0A    //-----------------------------------------------------------------------%0D%0A    /**%0D%0A     * Gets an instance of %3Ccode%3EInstant%3C/code%3E representing the current%0D%0A     * instant on the time line.%0D%0A     *%0D%0A     * @return a Instant represnting the current instant, never null%0D%0A     */%0D%0A    public abstract Instant instant();
 %0D%0A%0D%0A
@@ -2851,23 +2851,16 @@
  public 
-static 
 Year cur
@@ -3237,39 +3237,32 @@
  */%0D%0A    public 
-static 
 CalendarMonth cu
@@ -3619,39 +3619,32 @@
  */%0D%0A    public 
-static 
 CalendarDay toda
@@ -3925,39 +3925,32 @@
  */%0D%0A    public 
-static 
 CalendarDay yest
@@ -4242,23 +4242,16 @@
  public 
-static 
 Calendar
@@ -4657,23 +4657,16 @@
  public 
-static 
 TimeOfDa
@@ -4738,11 +4738,751 @@
    %7D%0D%0A%0D%0A
+    //-----------------------------------------------------------------------%0D%0A    /**%0D%0A     * Implementation of Now that always returns the latest time from%0D%0A     * %7B@link System#currentTimeMillis()%7D.%0D%0A     */%0D%0A    private static class SystemMillis extends Now %7B%0D%0A        /** The singleton instance. */%0D%0A        private static final SystemMillis INSTANCE = new SystemMillis();%0D%0A%0D%0A        /** Restricted constructor. */%0D%0A        private SystemMillis() %7B%0D%0A            super();%0D%0A        %7D%0D%0A%0D%0A        /**%0D%0A         * Gets the current instant.%0D%0A         * @return the current instant%0D%0A         */%0D%0A        @Override%0D%0A        public Instant instant() %7B%0D%0A            return Instant.millisInstant(System.currentTimeMillis());%0D%0A        %7D%0D%0A    %7D%0D%0A%0D%0A
 %7D%0D%0A

Update to be an instance based class for dependency injection