]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/i18n/unicode/utmscale.h
ICU-66108.tar.gz
[apple/icu.git] / icuSources / i18n / unicode / utmscale.h
index dd3ffb30bf11c620658ca4f4e776c2911f8ce5bf..d8b8a2e668af1da0b3cf93ad806399afe07a7814 100644 (file)
@@ -1,6 +1,8 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
 /*
 *******************************************************************************
-* Copyright (C) 2004, International Business Machines Corporation and
+* Copyright (C) 2004 - 2008, International Business Machines Corporation and
 * others. All Rights Reserved.
 *******************************************************************************
 */
  *  </tr>
  *
  *  <tr>
- *    <td>JAVA_TIME</td>
+ *    <td>UDTS_JAVA_TIME</td>
  *    <td>int64_t</td>
  *    <td>milliseconds</td>
  *    <td>Jan 1, 1970</td>
  *  </tr>
  *  <tr>
  *
- *    <td>UNIX_TIME</td>
+ *    <td>UDTS_UNIX_TIME</td>
  *    <td>int32_t or int64_t</td>
  *    <td>seconds</td>
  *    <td>Jan 1, 1970</td>
  *  </tr>
  *  <tr>
- *    <td>ICU4C_TIME</td>
+ *    <td>UDTS_ICU4C_TIME</td>
  *
  *    <td>double</td>
  *    <td>milliseconds</td>
  *    <td>Jan 1, 1970</td>
  *  </tr>
  *  <tr>
- *    <td>WINDOWS_FILE_TIME</td>
+ *    <td>UDTS_WINDOWS_FILE_TIME</td>
  *    <td>int64_t</td>
  *
  *    <td>ticks (100 nanoseconds)</td>
  *    <td>Jan 1, 1601</td>
  *  </tr>
  *  <tr>
- *    <td>WINDOWS_DATE_TIME</td>
+ *    <td>UDTS_DOTNET_DATE_TIME</td>
  *    <td>int64_t</td>
  *    <td>ticks (100 nanoseconds)</td>
  *
  *    <td>Jan 1, 0001</td>
  *  </tr>
  *  <tr>
- *    <td>MAC_OLD_TIME</td>
- *    <td>int32_t</td>
+ *    <td>UDTS_MAC_OLD_TIME</td>
+ *    <td>int32_t or int64_t</td>
  *    <td>seconds</td>
  *    <td>Jan 1, 1904</td>
  *
  *  </tr>
  *  <tr>
- *    <td>MAC_TIME</td>
+ *    <td>UDTS_MAC_TIME</td>
  *    <td>double</td>
  *    <td>seconds</td>
  *    <td>Jan 1, 2001</td>
  *  </tr>
  *
  *  <tr>
- *    <td>EXCEL_TIME</td>
+ *    <td>UDTS_EXCEL_TIME</td>
  *    <td>?</td>
  *    <td>days</td>
  *    <td>Dec 31, 1899</td>
  *  </tr>
  *  <tr>
  *
- *    <td>DB2_TIME</td>
+ *    <td>UDTS_DB2_TIME</td>
  *    <td>?</td>
  *    <td>days</td>
  *    <td>Dec 31, 1899</td>
  *  </tr>
+ *
+ *  <tr>
+ *    <td>UDTS_UNIX_MICROSECONDS_TIME</td>
+ *    <td>int64_t</td>
+ *    <td>microseconds</td>
+ *    <td>Jan 1, 1970</td>
+ *  </tr>
  * </table>
  *
  * <p>
  *
  *<p>
  * So what to use for this pivot? Java time has plenty of range, but cannot represent
- * Windows datetimes without severe loss of precision. ICU4C time addresses this by using a
+ * .NET <code>System.DateTime</code> values without severe loss of precision. ICU4C time addresses this by using a
  * <code>double</code> that is otherwise equivalent to the Java time. However, there are disadvantages
  * with <code>doubles</code>. They provide for much more graceful degradation in arithmetic operations.
  * But they only have 53 bits of accuracy, which means that they will lose precision when
  * converting back and forth to ticks. What would really be nice would be a
- * long double (80 bits -- 64 bit mantissa), but that is not supported on most systems.
+ * <code>long double</code> (80 bits -- 64 bit mantissa), but that is not supported on most systems.
  *
  *<p>
  * The Unix extended time uses a structure with two components: time in seconds and a
  * have a fixed size.
  *
  *<p>
- * Because of these issues, we ended up concluding that the Windows datetime would be the
- * best pivot. However, we use the full range allowed by the datatype, allowing for
- * datetimes back to 29,000 BC and up to 29,000 AD. This time scale is very fine grained,
- * does not lose precision, and covers a range that will meet almost all requirements.
- * It will not handle the range that Java times do, but frankly, being able to handle dates
- * before 29,000 BC or after 29,000 AD is of very limited interest.
+ * Because of these issues, we ended up concluding that the .NET framework's
+ * <code>System.DateTime</code> would be the best pivot. However, we use the full range
+ * allowed by the datatype, allowing for datetimes back to 29,000 BC and up to 29,000 AD.
+ * This time scale is very fine grained, does not lose precision, and covers a range that
+ * will meet almost all requirements. It will not handle the range that Java times do,
+ * but frankly, being able to handle dates before 29,000 BC or after 29,000 AD is of very limited interest.
  *
  */
 
  * <code>UDateTimeScale</code> values are used to specify the time scale used for
  * conversion into or out if the universal time scale.
  *
- * @draft ICU 3.2
+ * @stable ICU 3.2
  */
 typedef enum UDateTimeScale {
     /**
      * Used in the JDK. Data is a Java <code>long</code> (<code>int64_t</code>). Value
      * is milliseconds since January 1, 1970.
      *
-     * @draft ICU 3.2
+     * @stable ICU 3.2
      */
     UDTS_JAVA_TIME = 0,
 
@@ -205,7 +214,7 @@ typedef enum UDateTimeScale {
      * Used on Unix systems. Data is <code>int32_t</code> or <code>int64_t</code>. Value
      * is seconds since January 1, 1970.
      *
-     * @draft ICU 3.2
+     * @stable ICU 3.2
      */
     UDTS_UNIX_TIME,
     
@@ -213,7 +222,7 @@ typedef enum UDateTimeScale {
      * Used in IUC4C. Data is a <code>double</code>. Value
      * is milliseconds since January 1, 1970.
      *
-     * @draft ICU 3.2
+     * @stable ICU 3.2
      */
     UDTS_ICU4C_TIME,
     
@@ -221,23 +230,23 @@ typedef enum UDateTimeScale {
      * Used in Windows for file times. Data is an <code>int64_t</code>. Value
      * is ticks (1 tick == 100 nanoseconds) since January 1, 1601.
      *
-     * @draft ICU 3.2
+     * @stable ICU 3.2
      */
     UDTS_WINDOWS_FILE_TIME,
     
     /**
-     * Used in Windows for dates and times (?). Data is an <code>int64_t</code>. Value
+     * Used in the .NET framework's <code>System.DateTime</code> structure. Data is an <code>int64_t</code>. Value
      * is ticks (1 tick == 100 nanoseconds) since January 1, 0001.
      *
-     * @draft ICU 3.2
+     * @stable ICU 3.2
      */
-    UDTS_WINDOWS_DATE_TIME,
+    UDTS_DOTNET_DATE_TIME,
     
     /**
-     * Used in older Macintosh systems. Data is an <code>int32_t</code>. Value
+     * Used in older Macintosh systems. Data is <code>int32_t</code> or <code>int64_t</code>. Value
      * is seconds since January 1, 1904.
      *
-     * @draft ICU 3.2
+     * @stable ICU 3.2
      */
     UDTS_MAC_OLD_TIME,
     
@@ -245,7 +254,7 @@ typedef enum UDateTimeScale {
      * Used in newer Macintosh systems. Data is a <code>double</code>. Value
      * is seconds since January 1, 2001.
      *
-     * @draft ICU 3.2
+     * @stable ICU 3.2
      */
     UDTS_MAC_TIME,
     
@@ -253,7 +262,7 @@ typedef enum UDateTimeScale {
      * Used in Excel. Data is an <code>?unknown?</code>. Value
      * is days since December 31, 1899.
      *
-     * @draft ICU 3.2
+     * @stable ICU 3.2
      */
     UDTS_EXCEL_TIME,
     
@@ -261,26 +270,45 @@ typedef enum UDateTimeScale {
      * Used in DB2. Data is an <code>?unknown?</code>. Value
      * is days since December 31, 1899.
      *
-     * @draft ICU 3.2
+     * @stable ICU 3.2
      */
     UDTS_DB2_TIME,
 
     /**
-     * The first unused time scale value.
+     * Data is a <code>long</code>. Value is microseconds since January 1, 1970.
+     * Similar to Unix time (linear value from 1970) and struct timeval
+     * (microseconds resolution).
      *
-     * @draft ICU 3.2
+     * @stable ICU 3.8
+     */
+    UDTS_UNIX_MICROSECONDS_TIME,
+
+#ifndef U_HIDE_DEPRECATED_API
+    /**
+     * The first unused time scale value. The limit of this enum
+     * @deprecated ICU 59 The numeric value may change over time, see ICU ticket #12420.
      */
     UDTS_MAX_SCALE
+#endif  /* U_HIDE_DEPRECATED_API */
+
 } UDateTimeScale;
 
+/**
+ * <code>UTimeScaleValue</code> values are used to specify the time scale values
+ * to <code>utmscale_getTimeScaleValue</code>.
+ *
+ * @see utmscale_getTimeScaleValue
+ *
+ * @stable ICU 3.2
+ */
 typedef enum UTimeScaleValue {
     /**
      * The constant used to select the units vale
      * for a time scale.
      * 
-     * @see utms_getTimeScaleValue
+     * @see utmscale_getTimeScaleValue
      *
-     * @draft ICU 3.2
+     * @stable ICU 3.2
      */
     UTSV_UNITS_VALUE = 0,
 
@@ -288,52 +316,53 @@ typedef enum UTimeScaleValue {
      * The constant used to select the epoch offset value
      * for a time scale.
      * 
-     * @see utms_getTimeScaleValue
+     * @see utmscale_getTimeScaleValue
      *
-     * @draft ICU 3.2
+     * @stable ICU 3.2
      */
-    UTSV_EPOCH_OFFSET_VALUE,
+    UTSV_EPOCH_OFFSET_VALUE=1,
 
     /**
      * The constant used to select the minimum from value
      * for a time scale.
      * 
-     * @see utms_getTimeScaleValue
+     * @see utmscale_getTimeScaleValue
      *
-     * @draft ICU 3.2
+     * @stable ICU 3.2
      */
-    UTSV_FROM_MIN_VALUE,
+    UTSV_FROM_MIN_VALUE=2,
 
     /**
      * The constant used to select the maximum from value
      * for a time scale.
      * 
-     * @see utms_getTimeScaleValue
+     * @see utmscale_getTimeScaleValue
      *
-     * @draft ICU 3.2
+     * @stable ICU 3.2
      */
-    UTSV_FROM_MAX_VALUE,
+    UTSV_FROM_MAX_VALUE=3,
 
     /**
      * The constant used to select the minimum to value
      * for a time scale.
      * 
-     * @see utms_getTimeScaleValue
+     * @see utmscale_getTimeScaleValue
      *
-     * @draft ICU 3.2
+     * @stable ICU 3.2
      */
-    UTSV_TO_MIN_VALUE,
+    UTSV_TO_MIN_VALUE=4,
 
     /**
      * The constant used to select the maximum to value
      * for a time scale.
      * 
-     * @see utms_getTimeScaleValue
+     * @see utmscale_getTimeScaleValue
      *
-     * @draft ICU 3.2
+     * @stable ICU 3.2
      */
-    UTSV_TO_MAX_VALUE,
+    UTSV_TO_MAX_VALUE=5,
 
+#ifndef U_HIDE_INTERNAL_API
     /**
      * The constant used to select the epoch plus one value
      * for a time scale.
@@ -341,11 +370,11 @@ typedef enum UTimeScaleValue {
      * NOTE: This is an internal value. DO NOT USE IT. May not
      * actually be equal to the epoch offset value plus one.
      * 
-     * @see utms_getTimeScaleValue
+     * @see utmscale_getTimeScaleValue
      *
-     * @draft ICU 3.2
+     * @internal ICU 3.2
      */
-    UTSV_EPOCH_OFFSET_PLUS_1_VALUE,
+    UTSV_EPOCH_OFFSET_PLUS_1_VALUE=6,
 
     /**
      * The constant used to select the epoch plus one value
@@ -354,11 +383,11 @@ typedef enum UTimeScaleValue {
      * NOTE: This is an internal value. DO NOT USE IT. May not
      * actually be equal to the epoch offset value plus one.
      * 
-     * @see utms_getTimeScaleValue
+     * @see utmscale_getTimeScaleValue
      *
-     * @draft ICU 3.2
+     * @internal ICU 3.2
      */
-    UTSV_EPOCH_OFFSET_MINUS_1_VALUE,
+    UTSV_EPOCH_OFFSET_MINUS_1_VALUE=7,
 
     /**
      * The constant used to select the units round value
@@ -366,11 +395,11 @@ typedef enum UTimeScaleValue {
      * 
      * NOTE: This is an internal value. DO NOT USE IT.
      * 
-     * @see utms_getTimeScaleValue
+     * @see utmscale_getTimeScaleValue
      *
-     * @internal
+     * @internal ICU 3.2
      */
-    UTSV_UNITS_ROUND_VALUE,
+    UTSV_UNITS_ROUND_VALUE=8,
 
     /**
      * The constant used to select the minimum safe rounding value
@@ -378,11 +407,11 @@ typedef enum UTimeScaleValue {
      * 
      * NOTE: This is an internal value. DO NOT USE IT.
      * 
-     * @see utms_getTimeScaleValue
+     * @see utmscale_getTimeScaleValue
      *
-     * @internal
+     * @internal ICU 3.2
      */
-    UTSV_MIN_ROUND_VALUE,
+    UTSV_MIN_ROUND_VALUE=9,
 
     /**
      * The constant used to select the maximum safe rounding value
@@ -390,22 +419,24 @@ typedef enum UTimeScaleValue {
      * 
      * NOTE: This is an internal value. DO NOT USE IT.
      * 
-     * @see utms_getTimeScaleValue
+     * @see utmscale_getTimeScaleValue
      *
-     * @internal
+     * @internal ICU 3.2
      */
-    UTSV_MAX_ROUND_VALUE,
+    UTSV_MAX_ROUND_VALUE=10,
+
+#endif /* U_HIDE_INTERNAL_API */
 
+#ifndef U_HIDE_DEPRECATED_API
     /**
-     * The number of time scale values.
+     * The number of time scale values, in other words limit of this enum.
      * 
-     * NOTE: This is an internal value. DO NOT USE IT.
-     * 
-     * @see utms_getTimeScaleValue
-     *
-     * @internal
+     * @see utmscale_getTimeScaleValue
+     * @deprecated ICU 59 The numeric value may change over time, see ICU ticket #12420.
      */
-    UTSV_MAX_SCALE_VALUE
+    UTSV_MAX_SCALE_VALUE=11
+#endif  /* U_HIDE_DEPRECATED_API */
+
 } UTimeScaleValue;
 
 /**
@@ -416,9 +447,9 @@ typedef enum UTimeScaleValue {
  * @param status The status code. Set to <code>U_ILLEGAL_ARGUMENT_ERROR</code> if arguments are invalid.
  * @return - the value.
  * 
- * @draft ICU 3.2
+ * @stable ICU 3.2
  */
-U_DRAFT int64_t U_EXPORT2
+U_STABLE int64_t U_EXPORT2
     utmscale_getTimeScaleValue(UDateTimeScale timeScale, UTimeScaleValue value, UErrorCode *status);
 
 /* Conversion to 'universal time scale' */
@@ -432,9 +463,9 @@ U_DRAFT int64_t U_EXPORT2
  * 
  * @return The datetime converted to the universal time scale
  *
- * @draft ICU 3.2
+ * @stable ICU 3.2
  */
-U_DRAFT int64_t U_EXPORT2
+U_STABLE int64_t U_EXPORT2
     utmscale_fromInt64(int64_t otherTime, UDateTimeScale timeScale, UErrorCode *status);
 
 /* Conversion from 'universal time scale' */
@@ -448,9 +479,9 @@ U_DRAFT int64_t U_EXPORT2
  * 
  * @return The datetime converted to the given time scale
  *
- * @draft ICU 3.2
+ * @stable ICU 3.2
  */
-U_DRAFT int64_t U_EXPORT2
+U_STABLE int64_t U_EXPORT2
     utmscale_toInt64(int64_t universalTime, UDateTimeScale timeScale, UErrorCode *status);
 
 #endif /* #if !UCONFIG_NO_FORMATTING */