2010-01-07 8 views
2

Je voudrais calculer une durée alors que 1 jour consistera en 8 heures. Créer une nouvelle chronologie est la bonne approche?Jodatime - Custom Chronology

J'ai essayé de créer une chronologie personnalisée et remplacer la méthode d'assemblage avec quelque chose comme:

int millisPerDay = 1000 * 60 * 60 * 8; 

fields.days = new PreciseDurationField(DurationFieldType.days(), millisPerDay); 

Cependant, il n'a pas eu l'effet désiré.

Des suggestions?

Nous vous remercions à l'avance

Répondre

6

Pour répondre à ma propre question, à la suite est une classe Chronologie de travail complète (8 heures jours). Je l'affiche ici pour aider d'autres personnes qui essaient de résoudre des problèmes similaires.


import org.joda.time.Chronology; 
import org.joda.time.DateTimeZone; 
import org.joda.time.DurationFieldType; 
import org.joda.time.field.PreciseDurationField; 
import org.joda.time.chrono.AssembledChronology; 
import org.joda.time.chrono.GregorianChronology; 

public final class EightHoursDayChronology extends AssembledChronology { 

    private static final EightHoursDayChronology INSTANCE_UTC; 

    static{ 
    INSTANCE_UTC = new EightHoursDayChronology(GregorianChronology.getInstanceUTC()); 
    } 


    public static EightHoursDayChronology getInstance(){ 
     return INSTANCE_UTC ; 
    } 

    private EightHoursDayChronology(Chronology base) { 
     super(base, null); 
    } 

    @Override 
    protected void assemble(org.joda.time.chrono.AssembledChronology.Fields fields) { 

    int millisPerDay = 1000 * 60 * 60 * 8 ; 
    fields.days = new PreciseDurationField(DurationFieldType.days(), millisPerDay) 
    } 

    @Override 
    public Chronology withUTC() { 
    return INSTANCE_UTC ; 
    } 

    @Override 
    public Chronology withZone(DateTimeZone zone) { 
     throw new UnsupportedOperationException("Method was not implemented"); 
    } 

    @Override 
    public String toString() { 
     return "EightHoursDayChronology"; 
    } 

}