]> gitweb.fperrin.net Git - Dictionary.git/blobdiff - jars/icu4j-4_2_1-src/src/com/ibm/icu/impl/duration/BasicDurationFormat.java
go
[Dictionary.git] / jars / icu4j-4_2_1-src / src / com / ibm / icu / impl / duration / BasicDurationFormat.java
old mode 100755 (executable)
new mode 100644 (file)
index 606c5c6..4e4c3a5
-//##header\r
-/*\r
- *******************************************************************************\r
- * Copyright (C) 2007-2009, International Business Machines Corporation and    *\r
- * others. All Rights Reserved.                                                *\r
- *******************************************************************************\r
- */\r
-package com.ibm.icu.impl.duration;\r
-\r
-import java.text.FieldPosition;\r
-import java.util.Date;\r
-\r
-import com.ibm.icu.text.DurationFormat;\r
-import com.ibm.icu.util.ULocale;\r
-\r
-/**\r
- * @author srl\r
- */\r
-public class BasicDurationFormat extends DurationFormat {\r
-    \r
-    /**\r
-     * \r
-     */\r
-    private static final long serialVersionUID = -3146984141909457700L;\r
-    \r
-    transient DurationFormatter formatter;\r
-    transient PeriodFormatter pformatter;\r
-    transient PeriodFormatterService pfs = null;\r
-\r
-    public static DurationFormat getInstance(ULocale locale) {\r
-        return new BasicDurationFormat(locale);\r
-    }\r
-\r
-//#if defined(FOUNDATION10) || defined(J2SE13) || defined(J2SE14)\r
-//#else\r
-    private static boolean checkXMLDuration = true; \r
-//#endif\r
-\r
-    public StringBuffer format(Object object, StringBuffer toAppend, FieldPosition pos) {\r
-        if(object instanceof Long) {\r
-            String res = formatDurationFromNow(((Long)object).longValue());\r
-            return toAppend.append(res);\r
-        } else if(object instanceof Date) {\r
-            String res = formatDurationFromNowTo(((Date)object));\r
-            return toAppend.append(res);\r
-        }\r
-//#if defined(FOUNDATION10) || defined(J2SE13) || defined(J2SE14)\r
-//#else\r
-        if(checkXMLDuration) try {\r
-            if(object instanceof javax.xml.datatype.Duration) {\r
-                String res = formatDuration(object);\r
-                return toAppend.append(res);\r
-            }\r
-        } catch ( NoClassDefFoundError ncdfe ) {\r
-            System.err.println("Skipping XML capability");\r
-            checkXMLDuration = false; // don't try again\r
-        }\r
-//#endif\r
-        throw new IllegalArgumentException("Cannot format given Object as a Duration");\r
-\r
-    }\r
-    \r
-    public BasicDurationFormat() {\r
-        pfs = BasicPeriodFormatterService.getInstance();\r
-        formatter = pfs.newDurationFormatterFactory().getFormatter();\r
-        pformatter = pfs.newPeriodFormatterFactory().setDisplayPastFuture(false).getFormatter();\r
-    }\r
-    /**\r
-     * \r
-     */\r
-    public BasicDurationFormat(ULocale locale) {\r
-        super(locale);\r
-        pfs = BasicPeriodFormatterService.getInstance();\r
-        formatter = pfs.newDurationFormatterFactory().setLocale(locale.getName()).getFormatter();\r
-        pformatter = pfs.newPeriodFormatterFactory().setDisplayPastFuture(false).setLocale(locale.getName()).getFormatter();\r
-    }\r
-\r
-    /* (non-Javadoc)\r
-     * @see com.ibm.icu.text.DurationFormat#formatDurationFrom(long, long)\r
-     */\r
-    public String formatDurationFrom(long duration, long referenceDate) {\r
-        return formatter.formatDurationFrom(duration, referenceDate);\r
-    }\r
-\r
-    /* (non-Javadoc)\r
-     * @see com.ibm.icu.text.DurationFormat#formatDurationFromNow(long)\r
-     */\r
-    public String formatDurationFromNow(long duration) {\r
-        return formatter.formatDurationFromNow(duration);\r
-    }\r
-\r
-    /* (non-Javadoc)\r
-     * @see com.ibm.icu.text.DurationFormat#formatDurationFromNowTo(java.util.Date)\r
-     */\r
-    public String formatDurationFromNowTo(Date targetDate) {\r
-        return formatter.formatDurationFromNowTo(targetDate);\r
-    }\r
-\r
-//#if defined(FOUNDATION10) || defined(J2SE13) || defined(J2SE14)\r
-//#else\r
-    /** \r
-     *  JDK 1.5+ only\r
-     * @param o\r
-     * @return\r
-     * @see http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/datatype/Duration.html\r
-     */\r
-    public String formatDuration(Object obj) {\r
-        javax.xml.datatype.DatatypeConstants.Field inFields[] = { \r
-                javax.xml.datatype.DatatypeConstants.YEARS,\r
-                javax.xml.datatype.DatatypeConstants.MONTHS,\r
-                javax.xml.datatype.DatatypeConstants.DAYS,\r
-                javax.xml.datatype.DatatypeConstants.HOURS,\r
-                javax.xml.datatype.DatatypeConstants.MINUTES,\r
-                javax.xml.datatype.DatatypeConstants.SECONDS,\r
-            };\r
-             TimeUnit outFields[] = { \r
-                TimeUnit.YEAR,\r
-                TimeUnit.MONTH,\r
-                TimeUnit.DAY,\r
-                TimeUnit.HOUR,\r
-                TimeUnit.MINUTE,\r
-                TimeUnit.SECOND,\r
-            };\r
-\r
-        javax.xml.datatype.Duration inDuration = (javax.xml.datatype.Duration)obj;\r
-        Period p = null;\r
-        javax.xml.datatype.Duration duration = inDuration;\r
-        boolean inPast = false;\r
-        if(inDuration.getSign()<0) {\r
-            duration = inDuration.negate();\r
-            inPast = true;\r
-        }\r
-        // convert a Duration to a Period\r
-        boolean sawNonZero = false; // did we have a set, non-zero field?\r
-        for(int i=0;i<inFields.length;i++) {\r
-            if(duration.isSet(inFields[i])) {\r
-                Number n = duration.getField(inFields[i]);\r
-                if(n.intValue() == 0 && !sawNonZero) {\r
-                    continue; // ignore zero fields larger than the largest nonzero field\r
-                } else {\r
-                    sawNonZero = true;\r
-                }\r
-                float floatVal = n.floatValue();\r
-                // is there a 'secondary' unit to set?\r
-                TimeUnit alternateUnit = null;\r
-                float alternateVal = 0;\r
-                \r
-                // see if there is a fractional part\r
-                if(outFields[i]==TimeUnit.SECOND) {\r
-                    double fullSeconds = floatVal;\r
-                    double intSeconds = Math.floor(floatVal);\r
-                    double millis = (fullSeconds-intSeconds)*1000.0;\r
-                    if(millis > 0.0) {\r
-                        alternateUnit = TimeUnit.MILLISECOND;\r
-                        alternateVal=(float)millis;\r
-                        floatVal=(float)intSeconds;\r
-                    }\r
-                }\r
-                \r
-                if(p == null) {\r
-                    p = Period.at(floatVal, outFields[i]);\r
-                } else {\r
-                    p = p.and(floatVal, outFields[i]);\r
-                }\r
-                \r
-                if(alternateUnit != null) {\r
-                    p = p.and(alternateVal, alternateUnit); // add in MILLISECONDs\r
-                }\r
-            }\r
-        }\r
-        \r
-        if(p == null) {\r
-            // no fields set  = 0 seconds\r
-            return formatDurationFromNow(0);\r
-        } else {\r
-            if(inPast) {// was negated, above.\r
-                p = p.inPast();\r
-            } else {\r
-                p = p.inFuture();\r
-            }\r
-        }\r
-        \r
-        // now, format it.\r
-        return pformatter.format(p);\r
-    }\r
-//#endif\r
-}\r
+//##header J2SE15
+/*
+ *******************************************************************************
+ * Copyright (C) 2007-2009, International Business Machines Corporation and    *
+ * others. All Rights Reserved.                                                *
+ *******************************************************************************
+ */
+package com.ibm.icu.impl.duration;
+
+import java.text.FieldPosition;
+import java.util.Date;
+
+import com.ibm.icu.text.DurationFormat;
+import com.ibm.icu.util.ULocale;
+
+/**
+ * @author srl
+ */
+public class BasicDurationFormat extends DurationFormat {
+    
+    /**
+     * 
+     */
+    private static final long serialVersionUID = -3146984141909457700L;
+    
+    transient DurationFormatter formatter;
+    transient PeriodFormatter pformatter;
+    transient PeriodFormatterService pfs = null;
+
+    public static DurationFormat getInstance(ULocale locale) {
+        return new BasicDurationFormat(locale);
+    }
+
+//#if defined(FOUNDATION10) || defined(J2SE13) || defined(J2SE14)
+//#else
+    private static boolean checkXMLDuration = true; 
+//#endif
+
+    public StringBuffer format(Object object, StringBuffer toAppend, FieldPosition pos) {
+        if(object instanceof Long) {
+            String res = formatDurationFromNow(((Long)object).longValue());
+            return toAppend.append(res);
+        } else if(object instanceof Date) {
+            String res = formatDurationFromNowTo(((Date)object));
+            return toAppend.append(res);
+        }
+//#if defined(FOUNDATION10) || defined(J2SE13) || defined(J2SE14)
+//#else
+        if(checkXMLDuration) try {
+            if(object instanceof javax.xml.datatype.Duration) {
+                String res = formatDuration(object);
+                return toAppend.append(res);
+            }
+        } catch ( NoClassDefFoundError ncdfe ) {
+            System.err.println("Skipping XML capability");
+            checkXMLDuration = false; // don't try again
+        }
+//#endif
+        throw new IllegalArgumentException("Cannot format given Object as a Duration");
+
+    }
+    
+    public BasicDurationFormat() {
+        pfs = BasicPeriodFormatterService.getInstance();
+        formatter = pfs.newDurationFormatterFactory().getFormatter();
+        pformatter = pfs.newPeriodFormatterFactory().setDisplayPastFuture(false).getFormatter();
+    }
+    /**
+     * 
+     */
+    public BasicDurationFormat(ULocale locale) {
+        super(locale);
+        pfs = BasicPeriodFormatterService.getInstance();
+        formatter = pfs.newDurationFormatterFactory().setLocale(locale.getName()).getFormatter();
+        pformatter = pfs.newPeriodFormatterFactory().setDisplayPastFuture(false).setLocale(locale.getName()).getFormatter();
+    }
+
+    /* (non-Javadoc)
+     * @see com.ibm.icu.text.DurationFormat#formatDurationFrom(long, long)
+     */
+    public String formatDurationFrom(long duration, long referenceDate) {
+        return formatter.formatDurationFrom(duration, referenceDate);
+    }
+
+    /* (non-Javadoc)
+     * @see com.ibm.icu.text.DurationFormat#formatDurationFromNow(long)
+     */
+    public String formatDurationFromNow(long duration) {
+        return formatter.formatDurationFromNow(duration);
+    }
+
+    /* (non-Javadoc)
+     * @see com.ibm.icu.text.DurationFormat#formatDurationFromNowTo(java.util.Date)
+     */
+    public String formatDurationFromNowTo(Date targetDate) {
+        return formatter.formatDurationFromNowTo(targetDate);
+    }
+
+//#if defined(FOUNDATION10) || defined(J2SE13) || defined(J2SE14)
+//#else
+    /** 
+     *  JDK 1.5+ only
+     * @param o
+     * @return
+     * @see http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/datatype/Duration.html
+     */
+    public String formatDuration(Object obj) {
+        javax.xml.datatype.DatatypeConstants.Field inFields[] = { 
+                javax.xml.datatype.DatatypeConstants.YEARS,
+                javax.xml.datatype.DatatypeConstants.MONTHS,
+                javax.xml.datatype.DatatypeConstants.DAYS,
+                javax.xml.datatype.DatatypeConstants.HOURS,
+                javax.xml.datatype.DatatypeConstants.MINUTES,
+                javax.xml.datatype.DatatypeConstants.SECONDS,
+            };
+             TimeUnit outFields[] = { 
+                TimeUnit.YEAR,
+                TimeUnit.MONTH,
+                TimeUnit.DAY,
+                TimeUnit.HOUR,
+                TimeUnit.MINUTE,
+                TimeUnit.SECOND,
+            };
+
+        javax.xml.datatype.Duration inDuration = (javax.xml.datatype.Duration)obj;
+        Period p = null;
+        javax.xml.datatype.Duration duration = inDuration;
+        boolean inPast = false;
+        if(inDuration.getSign()<0) {
+            duration = inDuration.negate();
+            inPast = true;
+        }
+        // convert a Duration to a Period
+        boolean sawNonZero = false; // did we have a set, non-zero field?
+        for(int i=0;i<inFields.length;i++) {
+            if(duration.isSet(inFields[i])) {
+                Number n = duration.getField(inFields[i]);
+                if(n.intValue() == 0 && !sawNonZero) {
+                    continue; // ignore zero fields larger than the largest nonzero field
+                } else {
+                    sawNonZero = true;
+                }
+                float floatVal = n.floatValue();
+                // is there a 'secondary' unit to set?
+                TimeUnit alternateUnit = null;
+                float alternateVal = 0;
+                
+                // see if there is a fractional part
+                if(outFields[i]==TimeUnit.SECOND) {
+                    double fullSeconds = floatVal;
+                    double intSeconds = Math.floor(floatVal);
+                    double millis = (fullSeconds-intSeconds)*1000.0;
+                    if(millis > 0.0) {
+                        alternateUnit = TimeUnit.MILLISECOND;
+                        alternateVal=(float)millis;
+                        floatVal=(float)intSeconds;
+                    }
+                }
+                
+                if(p == null) {
+                    p = Period.at(floatVal, outFields[i]);
+                } else {
+                    p = p.and(floatVal, outFields[i]);
+                }
+                
+                if(alternateUnit != null) {
+                    p = p.and(alternateVal, alternateUnit); // add in MILLISECONDs
+                }
+            }
+        }
+        
+        if(p == null) {
+            // no fields set  = 0 seconds
+            return formatDurationFromNow(0);
+        } else {
+            if(inPast) {// was negated, above.
+                p = p.inPast();
+            } else {
+                p = p.inFuture();
+            }
+        }
+        
+        // now, format it.
+        return pformatter.format(p);
+    }
+//#endif
+}