note
	description: "Summary description for {NS_DATE}."
	author: "Daniel Furrer"
	date: "$Date$"
	revision: "$Revision$"

class
	NS_DATE

inherit
	NS_OBJECT

create
	make,
	make_with_time_interval_since_now,
	make_with_time_interval_since_reference_date,
	make_with_time_interval_since1970,
	distant_future,
	distant_past

create {NS_OBJECT}
	make_from_pointer,
	share_from_pointer

feature {NONE} -- Creating Date Objects

	make
			-- Creates and returns a new date set to the current date and time.
		do
			make_from_pointer ({NS_DATE_API}.create_default)
		end

	make_with_time_interval_since_now (a_secs: REAL_64)
			-- Creates and returns an <code>NSDate</code> object set to a given number of seconds from the current date and time.
		do
			make_from_pointer ({NS_DATE_API}.create_with_time_interval_since_now (a_secs))
		end

	make_with_time_interval_since_reference_date (a_secs: REAL_64)
			-- Creates and returns an <code>NSDate</code> object set to a given number of seconds from the first instant of 1 January 2001, GMT.
		do
			make_from_pointer ({NS_DATE_API}.create_with_time_interval_since_reference_date (a_secs))
		end

	make_with_time_interval_since1970 (a_secs: REAL_64)
			-- Creates and returns an <code>NSDate</code> object set to the given number of seconds from the first instant of 1 January 1970, GMT.
		do
			make_from_pointer ({NS_DATE_API}.create_with_time_interval_since1970 (a_secs))
		end

feature -- Initializing Date Objects

	init_with_time_interval_since_now (a_secs_to_be_added_to_now: REAL_64)
			-- Returns an <code>NSDate</code> object initialized relative to the current date and time by a given number of seconds.
		do
			item := {NS_DATE_API}.init_with_time_interval_since_now (item, a_secs_to_be_added_to_now)
		end

	init_with_time_interval_since_date (a_secs_to_be_added: REAL_64; a_another_date: NS_DATE)
			-- Returns an <code>NSDate</code> object initialized relative to another given date by a given number of seconds.
		do
			item := {NS_DATE_API}.init_with_time_interval_since_date (item, a_secs_to_be_added, a_another_date.item)
		end

	init_with_time_interval_since_reference_date (a_secs_to_be_added: REAL_64)
			-- Returns an <code>NSDate</code> object initialized relative the first instant of 1 January 2001, GMT by a given number of seconds.
		do
			item := {NS_DATE_API}.init_with_time_interval_since_reference_date (item, a_secs_to_be_added)
		end

feature -- Getting Temporal Boundaries

	distant_future
			-- Creates and returns an <code>NSDate</code> object representing a date in the distant future.
		do
			share_from_pointer ({NS_DATE_API}.distant_future)
		end

	distant_past
			-- Creates and returns an <code>NSDate</code> object representing a date in the distant past.
		do
			share_from_pointer ({NS_DATE_API}.distant_past)
		end

feature -- Comparing Dates

	is_equal_to_date (a_other_date: NS_DATE): BOOLEAN
			-- Returns a Boolean value that indicates whether a given object is an <code>NSDate</code> object and exactly equal the receiver.
		do
			Result := {NS_DATE_API}.is_equal_to_date (item, a_other_date.item)
		end

	earlier_date (a_another_date: NS_DATE): NS_DATE
			-- Returns the earlier of the receiver and another given date.
		do
			create Result.share_from_pointer ({NS_DATE_API}.earlier_date (item, a_another_date.item))
		end

	later_date (a_another_date: NS_DATE): NS_DATE
			-- Returns the later of the receiver and another given date.
		do
			create Result.share_from_pointer ({NS_DATE_API}.later_date (item, a_another_date.item))
		end

	compare (a_other: NS_DATE): INTEGER
			-- Returns an NSComparisonResult value that indicates the temporal ordering of the receiver and another given date.
		do
			Result := {NS_DATE_API}.compare (item, a_other.item)
		end

feature -- Getting Time Intervals

	time_interval_since_date (a_another_date: NS_DATE): REAL_64
			-- Returns the interval between the receiver and another given date.
		do
			Result := {NS_DATE_API}.time_interval_since_date (item, a_another_date.item)
		end

	time_interval_since_now: REAL_64
			-- Returns the interval between the receiver and the current date and time.
		do
			Result := {NS_DATE_API}.time_interval_since_now (item)
		end

	time_interval_since_reference_date: REAL_64
			-- Returns the interval between the first instant of 1 January 2001, GMT and the current date and time.
		do
			Result := {NS_DATE_API}.time_interval_since_reference_date
		end

	time_interval_since1970: REAL_64
			-- Returns the interval between the receiver and the first instant of 1 January 1970, GMT.
		do
			Result := {NS_DATE_API}.time_interval_since1970 (item)
		end

feature -- Representing Dates as Strings

	description: NS_STRING_BASE
			-- Returns a string representation of the receiver.
		do
			create Result.share_from_pointer ({NS_DATE_API}.description (item))
		end

feature -- Converting to an NSCalendarDate Object

note
	copyright: "Copyright (c) 1984-2009, Eiffel Software and others"
	license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)"
	source: "[
			Eiffel Software
			5949 Hollister Ave., Goleta, CA 93117 USA
			Telephone 805-685-1006, Fax 805-685-6869
			Website http://www.eiffel.com
			Customer support http://support.eiffel.com
		]"
end