//
-// Open Service Platform
// Copyright (c) 2012 Samsung Electronics Co., Ltd.
//
// Licensed under the Apache License, Version 2.0 (the License);
#include <FBaseString.h>
#include <FBaseDouble.h>
-
namespace Tizen { namespace Base
{
/**
*
* @since 2.0
*
- * The %DateTime class represents dates and times with values ranging from 12:00:00 midnight,
- * January 1, 1 to 11:59:59 P.M., December 31, 9999 in the Gregorian calendar. It
+ * The %DateTime class represents dates and times with values ranging from 12:00:00.000 midnight,
+ * January 1, 1 to 11:59:59.999 P.M., December 31, 9999 in the Gregorian calendar. It
* provides methods for conversion between the time formats.
*
* For more information on the class features, see <a href="../org.tizen.native.appprogramming/html/guide/base/datetime_timespan.htm">DateTime and TimeSpan</a>.
* #include <FBase.h>
*
* using namespace Tizen::Base;
- *
+ *
* // This method sets both current local time and UTC time.
* void
* MyClass::DateTimeSample(void)
*
* @since 2.0
*
- * @param[in] value The instance of TimeSpan
+ * @param[in] value An instance of TimeSpan
* @exception E_SUCCESS The method is successful.
- * @exception E_OUT_OF_RANGE The value of the argument is outside the valid range defined by the method. @n
- * The resulting value of %DateTime is greater than the value returned by GetMaxValue() or @n
- * is less than the value returned by GetMinValue().
+ * @exception E_OUT_OF_RANGE Either of the following conditions has occurred:
+ * - The specified @c value is outside the valid range defined by the method.
+ * - The resulting value of %DateTime is greater than the value returned by GetMaxValue().
+ * - The resulting value of %DateTime is less than the value returned by GetMinValue().
*/
result SetValue(const TimeSpan& value);
*
* @since 2.0
*
- * @return An error code
+ * @return An error code
* @param[in] year The year to set
* @param[in] month The month to set
* @param[in] day The day to set
* @param[in] minute The minute set
* @param[in] second The second to set
* @exception E_SUCCESS The method is successful.
- * @exception E_OUT_OF_RANGE The value of the argument is outside the valid range defined by the method. @n
- * Either the arguments are greater than the value returned by GetMaxValue() or
- * are less than the value returned by GetMinValue(), or
- * the arguments contain invalid values.
- * For example, day is 31 when month is 2.
+ * @exception E_OUT_OF_RANGE Either of the following conditions has occurred:
+ * - The value of the arguments is outside the valid range defined by the method.
+ * - Either the arguments are greater than the value returned by GetMaxValue() or
+ * less than the value returned by GetMinValue().
+ * - The arguments contain invalid values,
+ * for example, @c day is @c 31 when @c month is @c 2.
*/
result SetValue(int year, int month, int day, int hour = 0, int minute = 0, int second = 0);
/**
+ * Sets the current instance of %DateTime to the specified year, month, day, hour, minute, second, and millisecond.
+ *
+ * @since 2.1
+ *
+ * @return An error code
+ * @param[in] year The year to set
+ * @param[in] month The month to set
+ * @param[in] day The day to set
+ * @param[in] hour The hour to set
+ * @param[in] minute The minute set
+ * @param[in] second The second to set
+ * @param[in] millisecond The millisecond to set
+ * @exception E_SUCCESS The method is successful.
+ * @exception E_OUT_OF_RANGE Either of the following conditions has occurred:
+ * - The value of the arguments is outside the valid range defined by the method.
+ * - Either the arguments are greater than the value returned by GetMaxValue() or
+ * less than the value returned by GetMinValue().
+ * - The arguments contain invalid values,
+ * for example, @c day is @c 31 when @c month is @c 2.
+ */
+ result SetValue(int year, int month, int day, int hour, int minute, int second, int millisecond);
+
+ /**
+ * Sets the current instance of %DateTime with the specified number of ticks.
+ * The tick value of type @c long @c long represents dates and times ranging from January 1, 1 A.D. 00:00:00.000 am.
+ *
+ * @since 2.1
+ *
+ * @return An error code
+ * @param[in] ticks The number of ticks
+ * @exception E_SUCCESS The method is successful.
+ * @exception E_OUT_OF_RANGE Either of the following conditions has occurred:
+ * - The value of the arguments is outside the valid range defined by the method.
+ * - Either the arguments are greater than the value returned by GetMaxValue() or
+ * less than the value returned by GetMinValue().
+ * - The arguments contain invalid values,
+ * for example, @c day is @c 31 when @c month is @c 2.
+ */
+ result SetValue(long long ticks);
+
+ /**
* Copying of objects using this copy assignment operator is allowed.
*
* @since 2.0
*
- * @return A reference to the current object
- * @param[in] rhs An instance of %DateTime
+ * @return A reference to the current object
+ * @param[in] rhs An instance of %DateTime to copy
*/
DateTime& operator =(const DateTime& rhs);
*
* @since 2.0
*
- * @return @c true if the current instance is equivalent to the specified instance, @n
- * else @c false
- * @param[in] rhs An instance of %DateTime
+ * @return @c true if the current instance is equivalent to the specified instance, @n
+ * else @c false
+ * @param[in] rhs An instance of %DateTime to compare
*/
bool operator ==(const DateTime& rhs) const;
*
* @since 2.0
*
- * @return @c true if the current instance is not equivalent to the specified instance, @n
- * else @c false
- * @param[in] rhs An instance of %DateTime
+ * @return @c true if the current instance is not equivalent to the specified instance, @n
+ * else @c false
+ * @param[in] rhs An instance of %DateTime to compare
*/
bool operator !=(const DateTime& rhs) const;
*
* @since 2.0
*
- * @return @c true if the value of the current instance is less than the value of the specified instance, @n
- * else @c false
- * @param[in] rhs An instance of %DateTime
+ * @return @c true if the value of the current instance is less than the value of the specified instance, @n
+ * else @c false
+ * @param[in] rhs An instance of %DateTime to compare
*/
bool operator <(const DateTime& rhs) const;
*
* @since 2.0
*
- * @return @c true if the value of the current instance is greater than the value of the specified instance, @n
- * else @c false
- * @param[in] rhs An instance of %DateTime
+ * @return @c true if the value of the current instance is greater than the value of the specified instance, @n
+ * else @c false
+ * @param[in] rhs An instance of %DateTime to compare
*/
bool operator >(const DateTime& rhs) const;
*
* @since 2.0
*
- * @return @c true if the value of the current instance is less than or equal to the value of the specified instance, @n
- * else @c false
- * @param[in] rhs An instance of %DateTime
+ * @return @c true if the value of the current instance is less than or equal to the value of the specified instance, @n
+ * else @c false
+ * @param[in] rhs An instance of %DateTime to compare
*/
bool operator <=(const DateTime& rhs) const;
*
* @since 2.0
*
- * @return @c true if the value of the current instance is greater than or equal to the value of the specified instance, @n
- * else @c false
- * @param[in] rhs An instance of %DateTime
+ * @return @c true if the value of the current instance is greater than or equal to the value of the specified instance, @n
+ * else @c false
+ * @param[in] rhs An instance of %DateTime to compare
*/
bool operator >=(const DateTime& rhs) const;
*
* @since 2.0
*
- * @return An error code
+ * @return An error code
* @param[in] t The time span to add
* @exception E_SUCCESS The method is successful.
- * @exception E_OUT_OF_RANGE The value of the argument is outside the valid range defined by the method. @n
- * The resulting value of %DateTime is greater than the value returned by GetMaxValue() or @n
- * is less than the value returned by GetMinValue().
+ * @exception E_OUT_OF_RANGE Either of the following conditions has occurred:
+ * - The value of the argument is outside the valid range defined by the method.
+ * - Either the resulting value of %DateTime is greater than the value returned by GetMaxValue() or @n
+ * less than the value returned by GetMinValue().
*/
result Add(const TimeSpan& t);
*
* @since 2.0
*
- * @return An error code
+ * @return An error code
* @param[in] days The number of days to add
* @exception E_SUCCESS The method is successful.
- * @exception E_OUT_OF_RANGE The value of the argument is outside the valid range defined by the method. @n
- * The resulting value of %DateTime is greater than the value returned by GetMaxValue() or @n
- * is less than the value returned by GetMinValue().
+ * @exception E_OUT_OF_RANGE Either of the following conditions has occurred:
+ * - The value of the argument is outside the valid range defined by the method.
+ * - Either the resulting value of %DateTime is greater than the value returned by GetMaxValue() or @n
+ * less than the value returned by GetMinValue().
*/
result AddDays(int days);
*
* @since 2.0
*
- * @return An error code
+ * @return An error code
* @param[in] hours The number of hours to add
* @exception E_SUCCESS The method is successful.
- * @exception E_OUT_OF_RANGE The value of the argument is outside the valid range defined by the method. @n
- * The resulting value of %DateTime is greater than the value returned by GetMaxValue() or @n
- * is less than the value returned by GetMinValue().
+ * @exception E_OUT_OF_RANGE Either of the following conditions has occurred:
+ * - The value of the argument is outside the valid range defined by the method.
+ * - Either the resulting value of %DateTime is greater than the value returned by GetMaxValue() or @n
+ * less than the value returned by GetMinValue().
*/
result AddHours(int hours);
*
* @since 2.0
*
- * @return An error code
+ * @return An error code
* @param[in] minutes The number of minutes to add
* @exception E_SUCCESS The method is successful.
- * @exception E_OUT_OF_RANGE The value of the argument is outside the valid range defined by the method. @n
- * The resulting value of %DateTime is greater than the value returned by GetMaxValue() or @n
- * is less than the value returned by GetMinValue().
+ * @exception E_OUT_OF_RANGE Either of the following conditions has occurred:
+ * - The value of the argument is outside the valid range defined by the method.
+ * - Either the resulting value of %DateTime is greater than the value returned by GetMaxValue() or @n
+ * less than the value returned by GetMinValue().
*/
result AddMinutes(int minutes);
*
* @since 2.0
*
- * @return An error code
+ * @return An error code
* @param[in] months The number of months to add
* @exception E_SUCCESS The method is successful.
- * @exception E_OUT_OF_RANGE The value of the argument is outside the valid range defined by the method. @n
- * The resulting value of %DateTime is greater than the value returned by GetMaxValue() or @n
- * is less than the value returned by GetMinValue().
+ * @exception E_OUT_OF_RANGE Either of the following conditions has occurred:
+ * - The value of the argument is outside the valid range defined by the method.
+ * - Either the resulting value of %DateTime is greater than the value returned by GetMaxValue() or @n
+ * or less than the value returned by GetMinValue().
*/
result AddMonths(int months);
*
* @since 2.0
*
- * @return An error code
+ * @return An error code
* @param[in] seconds The number of seconds to add
* @exception E_SUCCESS The method is successful.
- * @exception E_OUT_OF_RANGE The value of the argument is outside the valid range defined by the method. @n
- * The resulting value of %DateTime is greater than the value returned by GetMaxValue() or @n
- * is less than the value returned by GetMinValue().
+ * @exception E_OUT_OF_RANGE Either of the following conditions has occurred:
+ * - The value of the argument is outside the valid range defined by the method.
+ * - Either the resulting value of %DateTime is greater than the value returned by GetMaxValue() or @n
+ * less than the value returned by GetMinValue().
*/
result AddSeconds(int seconds);
/**
+ * Adds the specified number of milliseconds to the instance of %DateTime.
+ *
+ * @since 2.1
+ *
+ * @return An error code
+ * @param[in] milliseconds The number of milliseconds to add
+ * @exception E_SUCCESS The method is successful.
+ * @exception E_OUT_OF_RANGE Either of the following conditions has occurred:
+ * - The value of the argument is outside the valid range defined by the method.
+ * - Either the resulting value of %DateTime is greater than the value returned by GetMaxValue() or @n
+ * less than the value returned by GetMinValue().
+ */
+ result AddMilliseconds(long long milliseconds);
+
+ /**
+ * Adds the specified number of ticks to the instance of %DateTime.
+ *
+ * @since 2.1
+ *
+ * @return An error code
+ * @param[in] ticks The number of ticks to add
+ * @exception E_SUCCESS The method is successful.
+ * @exception E_OUT_OF_RANGE Either of the following conditions has occurred:
+ * - The value of the argument is outside the valid range defined by the method.
+ * - Either the resulting value of %DateTime is greater than the value returned by GetMaxValue() or @n
+ * less than the value returned by GetMinValue().
+ */
+ result AddTicks(long long ticks);
+
+ /**
* Adds the specified number of years to the instance of %DateTime.
*
* @since 2.0
*
- * @return An error code
+ * @return An error code
* @param[in] years The number of years to add
* @exception E_SUCCESS The method is successful.
- * @exception E_OUT_OF_RANGE The value of the argument is outside the valid range defined by the method. @n
- * The resulting value of %DateTime is greater than the value returned by GetMaxValue() or @n
- * is less than the value returned by GetMinValue().
+ * @exception E_OUT_OF_RANGE Either of the following conditions has occurred:
+ * - The value of the argument is outside the valid range defined by the method.
+ * - Either the resulting value of %DateTime is greater than the value returned by GetMaxValue() or @n
+ * less than the value returned by GetMinValue().
*/
result AddYears(int years);
*
* @since 2.0
*
- * @return A 32-bit @c signed integer value
+ * @return The 32-bit @c signed integer value
* @code
- * < 0 if the value of @c dt1 is less than the value of @c dt2
- * == 0 if the value of @c dt1 is equal to the value of @c dt2
- * > 0 if the value of @c dt1 is greater than the value of @c dt2
+ * < 0 if the value of dt1 is less than the value of dt2
+ * == 0 if the value of dt1 is equal to the value of dt2
+ * > 0 if the value of dt1 is greater than the value of dt2
* @endcode
* @param[in] dt1 An instance of %DateTime
* @param[in] dt2 An instance of %DateTime
*
* @since 2.0
*
- * @return A 32-bit @c signed integer value
+ * @return The 32-bit @c signed integer value
* @code
* < 0 if the value of the current instance is less than value of the specified instance
* == 0 if the value of the current instance is equal to value of the specified instance
* > 0 if the value of the current instance is greater than value of the specified instance
* @endcode
- * @param[in] value An instance of %DateTime
+ * @param[in] value An instance of %DateTime
*/
int CompareTo(const DateTime& value) const;
* @since 2.0
*
* @return @c true if the specified instance of Object is equivalent to the current instance of %DateTime, @n
- else @c false
+ * else @c false
* @param[in] obj The object to compare with the current instance of %DateTime
- * @see Tizen::Base::Object::GetHashCode()
+ * @see Tizen::Base::Object::GetHashCode()
*/
virtual bool Equals(const Object& obj) const;
*
* @since 2.0
*
- * @return An error code
+ * @return An error code
* @param[in] year The year
* @param[in] month The month
* @param[out] days The number of days
* @exception E_SUCCESS The method is successful.
- * @exception E_OUT_OF_RANGE The value of the argument is outside the valid range defined by the method. @n
- * @c year must be a value between @c 1 and @c 9999 and @c month must be a value between @c 1 and @c 12.
+ * @exception E_OUT_OF_RANGE Either of the following conditions has occurred:
+ * - The value of the argument is outside the valid range defined by the method.
+ * - The specified @c year must be a value between @c 1 and @c 9999 and @c month must be a value between @c 1 and @c 12.
*/
static result GetDaysInMonth(int year, int month, int& days);
*
* @since 2.0
*
- * @return An error code
- * @param[in] t The time span to deduct
+ * @return An error code
+ * @param[in] t The time span to subtract
* @exception E_SUCCESS The method is successful.
- * @exception E_OUT_OF_RANGE The value of the argument is outside the valid range defined by the method. @n
- * The resulting value of %DateTime is greater than the value returned by GetMaxValue() or @n
- * is less than the value returned by GetMinValue().
+ * @exception E_OUT_OF_RANGE Either of the following conditions has occurred:
+ * - The value of the argument is outside the valid range defined by the method.
+ * - Either the resulting value of %DateTime is greater than the value returned by GetMaxValue() or @n
+ * less than the value returned by GetMinValue().
*/
result Subtract(const TimeSpan& t);
*
* @since 2.0
*
- * @return A string containing Unicode representation of the value of the current instance of %DateTime
- * @remarks The format of the String representation is "mm/dd/yyyy hh:mm:ss".
- * @remarks Use the Tizen::Locale namespace for a string of the locale-specific representation.
+ * @return The string that contains the Unicode representation of the value of the current instance of %DateTime
+ * @remarks
+ * - The format of the String representation is "mm/dd/yyyy hh:mm:ss".
+ * - Use the Tizen::Locale namespace for a string of the locale-specific representation.
*
*/
String ToString(void) const;
* @since 2.0
*
* @return An error code
- * @param[in] str A String representation of a date and time value
- * @param[out] dt The result of the method
+ * @param[in] str The String representation of the date and time value
+ * @param[out] dt The result of the method
* @exception E_SUCCESS The method is successful.
* @exception E_INVALID_FORMAT The specified string is in an invalid format.
- * @exception E_OUT_OF_RANGE The specified string contains an invalid value. @n
- * 1) The resulting value of %DateTime is greater than the value returned by GetMaxValue()
- * or is less than the value returned by GetMinValue(). @n
- * 2) The specified string contains an invalid value.
- * For example, day is 31 when the month is 2.
- * @remarks The format of the string is "mm/dd/yyyy hh:mm:ss".
+ * @exception E_OUT_OF_RANGE Either of the following conditions has occurred:
+ * - The specified string contains an invalid value.
+ * - Either the resulting value of %DateTime is greater than the value returned by GetMaxValue()
+ * or less than the value returned by GetMinValue().
+ * - The specified string contains an invalid value,
+ * for example, @c day is @c 31 when the @c month is @c 2.
+ * @remarks
+ * - The format of the string is "mm/dd/yyyy hh:mm:ss".
+ * - This method guarantees that the original value of the out-parameter is not changed when the method returns an error.
*/
static result Parse(const String& str, DateTime& dt);
*
* @since 2.0
*
- * @return An integer value indicating the year of the current instance of %DateTime
+ * @return The integer value that indicates the year of the current instance of %DateTime
*/
int GetYear(void) const;
*
* @since 2.0
*
- * @return An integer value indicating the month of the current instance of %DateTime
+ * @return The integer value that indicates the month of the current instance of %DateTime
*/
int GetMonth(void) const;
*
* @since 2.0
*
- * @return An integer value indicating the day of the current instance of %DateTime
+ * @return The integer value that indicates the day of the current instance of %DateTime
*/
int GetDay(void) const;
*
* @since 2.0
*
- * @return An integer value indicating the hour of the current instance of %DateTime
+ * @return The integer value that indicates the hour of the current instance of %DateTime
*/
int GetHour(void) const;
*
* @since 2.0
*
- * @return An integer value indicating the minute of the current instance of %DateTime
+ * @return The integer value that indicates the minute of the current instance of %DateTime
*/
int GetMinute(void) const;
*
* @since 2.0
*
- * @return An integer value indicating the second of the current instance of %DateTime
+ * @return The integer value that indicates the second of the current instance of %DateTime
*/
int GetSecond(void) const;
/**
+ * Gets the millisecond of the current instance of %DateTime.
+ *
+ * @since 2.1
+ *
+ * @return The integer value that indicates the millisecond of the current instance of %DateTime
+ */
+ int GetMillisecond(void) const;
+
+ /**
+ * Gets the number of ticks in one second.
+ *
+ * @since 2.1
+ *
+ * @return The number of ticks in one second.
+ */
+ static int GetTicksPerSecond(void);
+
+ /**
+ * Gets the tick of the current instance of %DateTime.
+ * The tick value of type @c long @c long represents dates and times ranging from January 1, 1 A.D. 00:00:00.000 am.
+ *
+ * @since 2.1
+ *
+ * @return The @c long @c long value that indicates the tick of the current instance of %DateTime
+ */
+ long long GetTicks(void) const;
+
+ /**
* Gets the number of milliseconds (in TimeSpan) since the minimum date (GetMinValue()).
*
* @since 2.0
TimeSpan GetTime(void) const;
/**
- * Gets the maximum allowable value of %DateTime (that is, "December 31 9999 23:59:59").
+ * Gets the maximum allowable value of %DateTime (that is, "December 31 9999 23:59:59.999").
*
* @since 2.0
*
static const DateTime& GetMaxValue(void);
/**
- * Gets the minimum allowable value of %DateTime (that is, "January 1 1 00:00:00").
+ * Gets the minimum allowable value of %DateTime (that is, "January 1 1 00:00:00.000").
*
* @since 2.0
*
* @since 2.0
*
* @return @c true if the year represented by the current instance of %DateTime is a leap year, @n
- * else @c false
+ * else @c false
*/
bool IsLeapYear(void) const;
* @since 2.0
*
* @return @c true if the specified year is a leap year, @n
- * else @c false
+ * else @c false
* @param[in] year The year
*/
static bool IsLeapYear(int year);
-
private:
- DateTime(int year, int month, int day, int hour, int minute, int second);
+ DateTime(int year, int month, int day, int hour, int minute, int second, int tick);
int CountLeapYear(int year) const
{
- return (int) ((year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400);
-
+ return static_cast< int >((year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400);
}
int CountDays(int year) const
{
- return (int) ((year - 1) * 365 + CountLeapYear(year));
+ return static_cast< int >((year - 1) * 365 + CountLeapYear(year));
}
int CountYears(int day) const
}
else
{
- return(year != (int) year ? 1 + (int) year : (int) year);
+ year = (year != static_cast< int >(year) ? 1 + static_cast< int >(year) : static_cast< int >(year));
+ int tempDays = day - CountDays(year);
+
+ // Check the boundary of days
+ if (IsLeapYear(year))
+ {
+ if (tempDays > 366)
+ {
+ year += 1;
+ }
+ }
+ else
+ {
+ if (tempDays > 365)
+ {
+ year += 1;
+ }
+ }
+
+ return year;
}
}
typedef struct
{
- int year; /**<The year (1 ~ 9999)*/
- int month; /**<The month (-12)*/
+ int year; /**<The year (1-9999)*/
+ int month; /**<The month (1-12)*/
int day; /**<The day (1-31)*/
int hour; /**<The hour (0-23)*/
int minute; /**<The minute (0-59)*/
- int second; /**<The second (0-59)*/
+ int second; /**<The first 16 bits store tick (0-999) and the last 16 bits store second (0-59)*/
} TmDateTime;
+ result ConvertTicksToDate(long long ticks, TmDateTime* pDateTime);
+ long long ConvertDateToTicks(const TmDateTime* pDateTime) const;
+
result ConvertSecondsToDate(long long seconds, TmDateTime* pDateTime);
long long ConvertDateToSeconds(const TmDateTime* pDateTime) const;
TmDateTime __dateTime;
-
friend class _DateTimeImpl;
- class _DateTimeImpl * __pDateTimeImpl;
+ class _DateTimeImpl* __pDateTimeImpl;
}; // DateTime
-
}} // Tizen::Base
-
#endif // _FBASE_DATE_TIME_H_