OpenConcerto

Dépôt officiel du code source de l'ERP OpenConcerto
sonarqube

svn://code.openconcerto.org/openconcerto

Rev

Rev 149 | Rev 182 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 149 Rev 180
Line 23... Line 23...
23
import java.util.GregorianCalendar;
23
import java.util.GregorianCalendar;
24
import java.util.HashMap;
24
import java.util.HashMap;
25
import java.util.List;
25
import java.util.List;
26
import java.util.Map;
26
import java.util.Map;
27
import java.util.TimeZone;
27
import java.util.TimeZone;
-
 
28
import java.util.concurrent.TimeUnit;
28
 
29
 
29
import javax.xml.datatype.DatatypeConfigurationException;
30
import javax.xml.datatype.DatatypeConfigurationException;
30
import javax.xml.datatype.DatatypeConstants;
31
import javax.xml.datatype.DatatypeConstants;
31
import javax.xml.datatype.DatatypeConstants.Field;
32
import javax.xml.datatype.DatatypeConstants.Field;
32
import javax.xml.datatype.DatatypeFactory;
33
import javax.xml.datatype.DatatypeFactory;
33
import javax.xml.datatype.Duration;
34
import javax.xml.datatype.Duration;
34
 
35
 
-
 
36
import net.jcip.annotations.GuardedBy;
35
import net.jcip.annotations.Immutable;
37
import net.jcip.annotations.Immutable;
36
 
38
 
37
public class TimeUtils {
39
public class TimeUtils {
-
 
40
 
-
 
41
    static public final int SECONDS_PER_MINUTE = 60;
-
 
42
    static public final int MINUTE_PER_HOUR = 60;
-
 
43
    static public final int SECONDS_PER_HOUR = SECONDS_PER_MINUTE * MINUTE_PER_HOUR;
-
 
44
 
-
 
45
    @GuardedBy("TimeUtils.class")
38
    static private DatatypeFactory typeFactory = null;
46
    static private DatatypeFactory typeFactory = null;
39
    static private List<Field> FIELDS_LIST = Arrays.asList(DatatypeConstants.YEARS, DatatypeConstants.MONTHS, DatatypeConstants.DAYS, DatatypeConstants.HOURS, DatatypeConstants.MINUTES,
47
    static private final List<Field> FIELDS_LIST = Arrays.asList(DatatypeConstants.YEARS, DatatypeConstants.MONTHS, DatatypeConstants.DAYS, DatatypeConstants.HOURS, DatatypeConstants.MINUTES,
40
            DatatypeConstants.SECONDS);
48
            DatatypeConstants.SECONDS);
41
    static private List<Field> DATE_FIELDS, TIME_FIELDS;
49
    static private final List<Field> DATE_FIELDS, TIME_FIELDS;
42
 
50
 
43
    static {
51
    static {
44
        final int dayIndex = FIELDS_LIST.indexOf(DatatypeConstants.DAYS);
52
        final int dayIndex = FIELDS_LIST.indexOf(DatatypeConstants.DAYS);
45
        DATE_FIELDS = Collections.unmodifiableList(FIELDS_LIST.subList(0, dayIndex + 1));
53
        DATE_FIELDS = Collections.unmodifiableList(FIELDS_LIST.subList(0, dayIndex + 1));
46
        TIME_FIELDS = Collections.unmodifiableList(FIELDS_LIST.subList(dayIndex + 1, FIELDS_LIST.size()));
54
        TIME_FIELDS = Collections.unmodifiableList(FIELDS_LIST.subList(dayIndex + 1, FIELDS_LIST.size()));
Line 70... Line 78...
70
 
78
 
71
    private static Class<? extends Number> getFieldClass(final Field f) {
79
    private static Class<? extends Number> getFieldClass(final Field f) {
72
        return f == DatatypeConstants.SECONDS ? BigDecimal.class : BigInteger.class;
80
        return f == DatatypeConstants.SECONDS ? BigDecimal.class : BigInteger.class;
73
    }
81
    }
74
 
82
 
75
    static public final DatatypeFactory getTypeFactory() {
83
    static public synchronized final DatatypeFactory getTypeFactory() {
76
        if (typeFactory == null)
84
        if (typeFactory == null)
77
            try {
85
            try {
78
                typeFactory = DatatypeFactory.newInstance();
86
                typeFactory = DatatypeFactory.newInstance();
79
            } catch (DatatypeConfigurationException e) {
87
            } catch (DatatypeConfigurationException e) {
80
                throw new IllegalStateException(e);
88
                throw new IllegalStateException(e);
Line 396... Line 404...
396
        cal.setTime(date2);
404
        cal.setTime(date2);
397
        TimeUtils.clearTime(cal);
405
        TimeUtils.clearTime(cal);
398
        final long day2 = cal.getTimeInMillis();
406
        final long day2 = cal.getTimeInMillis();
399
        return day1 == day2;
407
        return day1 == day2;
400
    }
408
    }
-
 
409
 
-
 
410
    static public final boolean isEqual(final long amount1, final TimeUnit unit1, final long amount2, final TimeUnit unit2) {
-
 
411
        final long finerAmount, coarserAmount;
-
 
412
        final TimeUnit finer, coarser;
-
 
413
        // don't truncate
-
 
414
        if (unit1.compareTo(unit2) < 0) {
-
 
415
            finerAmount = amount1;
-
 
416
            finer = unit1;
-
 
417
            coarserAmount = amount2;
-
 
418
            coarser = unit2;
-
 
419
        } else {
-
 
420
            finerAmount = amount2;
-
 
421
            finer = unit2;
-
 
422
            coarserAmount = amount1;
-
 
423
            coarser = unit1;
-
 
424
        }
-
 
425
        return finerAmount == finer.convert(coarserAmount, coarser);
-
 
426
    }
401
}
427
}