IslamicChronology.java 8.09 KB
package org.joda.time.chrono;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import org.joda.time.Chronology;
import org.joda.time.DateTime;
import org.joda.time.DateTimeField;
import org.joda.time.DateTimeZone;
import ug;
import ul;
import um;

public final class IslamicChronology
  extends ug
{
  public static final int AH = 1;
  public static final LeapYearPatternType LEAP_YEAR_15_BASED;
  public static final LeapYearPatternType LEAP_YEAR_16_BASED;
  public static final LeapYearPatternType LEAP_YEAR_HABASH_AL_HASIB = new LeapYearPatternType(3, 153692453);
  public static final LeapYearPatternType LEAP_YEAR_INDIAN;
  private static final DateTimeField a = new um("AH");
  private static final Map<DateTimeZone, IslamicChronology[]> b = new HashMap();
  private static final IslamicChronology c = getInstance(DateTimeZone.UTC);
  private static final long serialVersionUID = -3663823829888L;
  private final LeapYearPatternType d;
  
  static
  {
    LEAP_YEAR_15_BASED = new LeapYearPatternType(0, 623158436);
    LEAP_YEAR_16_BASED = new LeapYearPatternType(1, 623191204);
    LEAP_YEAR_INDIAN = new LeapYearPatternType(2, 690562340);
  }
  
  private IslamicChronology(Chronology paramChronology, LeapYearPatternType paramLeapYearPatternType)
  {
    super(paramChronology, 4);
    this.d = paramLeapYearPatternType;
  }
  
  public static IslamicChronology getInstance()
  {
    return getInstance(DateTimeZone.getDefault(), LEAP_YEAR_16_BASED);
  }
  
  public static IslamicChronology getInstance(DateTimeZone paramDateTimeZone)
  {
    return getInstance(paramDateTimeZone, LEAP_YEAR_16_BASED);
  }
  
  public static IslamicChronology getInstance(DateTimeZone paramDateTimeZone, LeapYearPatternType paramLeapYearPatternType)
  {
    DateTimeZone localDateTimeZone = paramDateTimeZone;
    if (paramDateTimeZone == null) {
      localDateTimeZone = DateTimeZone.getDefault();
    }
    synchronized (b)
    {
      paramDateTimeZone = (IslamicChronology[])b.get(localDateTimeZone);
      Object localObject1 = paramDateTimeZone;
      if (paramDateTimeZone == null)
      {
        localObject1 = new IslamicChronology[4];
        b.put(localDateTimeZone, localObject1);
      }
      Object localObject2 = localObject1[paramLeapYearPatternType.a];
      paramDateTimeZone = (DateTimeZone)localObject2;
      if (localObject2 == null)
      {
        if (localDateTimeZone == DateTimeZone.UTC)
        {
          paramDateTimeZone = new IslamicChronology(null, paramLeapYearPatternType);
          paramDateTimeZone = new IslamicChronology(LimitChronology.getInstance(paramDateTimeZone, new DateTime(1, 1, 1, 0, 0, 0, 0, paramDateTimeZone), null), paramLeapYearPatternType);
          localObject1[paramLeapYearPatternType.a] = paramDateTimeZone;
        }
      }
      else {
        return paramDateTimeZone;
      }
      paramDateTimeZone = new IslamicChronology(ZonedChronology.getInstance(getInstance(DateTimeZone.UTC, paramLeapYearPatternType), localDateTimeZone), paramLeapYearPatternType);
    }
  }
  
  public static IslamicChronology getInstanceUTC()
  {
    return c;
  }
  
  private Object readResolve()
  {
    Chronology localChronology = getBase();
    if (localChronology == null) {
      return getInstanceUTC();
    }
    return getInstance(localChronology.getZone());
  }
  
  final int a()
  {
    return 355;
  }
  
  final int a(int paramInt)
  {
    if (d(paramInt)) {
      return 355;
    }
    return 354;
  }
  
  final int a(long paramLong)
  {
    long l = paramLong + 42521587200000L;
    paramLong = l / 918518400000L;
    l %= 918518400000L;
    int i = (int)(30L * paramLong + 1L);
    if (d(i)) {
      paramLong = 30672000000L;
    }
    while (l >= paramLong)
    {
      l -= paramLong;
      i += 1;
      if (d(i))
      {
        paramLong = 30672000000L;
        continue;
        paramLong = 30585600000L;
      }
      else
      {
        paramLong = 30585600000L;
      }
    }
    return i;
  }
  
  final int a(long paramLong, int paramInt)
  {
    paramInt = (int)((paramLong - c(paramInt)) / 86400000L);
    if (paramInt == 354) {
      return 12;
    }
    return paramInt * 2 / 59 + 1;
  }
  
  final long a(long paramLong1, long paramLong2)
  {
    int i = a(paramLong1);
    int j = a(paramLong2);
    long l1 = c(i);
    long l2 = c(j);
    j = i - j;
    i = j;
    if (paramLong1 - l1 < paramLong2 - l2) {
      i = j - 1;
    }
    return i;
  }
  
  protected final void assemble(AssembledChronology.Fields paramFields)
  {
    if (getBase() == null)
    {
      super.assemble(paramFields);
      paramFields.era = a;
      paramFields.monthOfYear = new ul(this, 12);
      paramFields.months = paramFields.monthOfYear.getDurationField();
    }
  }
  
  final int b()
  {
    return 30;
  }
  
  final int b(int paramInt1, int paramInt2)
  {
    if ((paramInt2 == 12) && (d(paramInt1))) {}
    while ((paramInt2 - 1) % 2 == 0) {
      return 30;
    }
    return 29;
  }
  
  final int c()
  {
    return 1;
  }
  
  final int c(long paramLong)
  {
    int i = d(paramLong) - 1;
    if (i == 354) {
      return 30;
    }
    return i % 59 % 30 + 1;
  }
  
  final long c(int paramInt1, int paramInt2)
  {
    paramInt1 = paramInt2 - 1;
    if (paramInt1 % 2 == 1) {
      return paramInt1 / 2 * 5097600000L + 2592000000L;
    }
    return paramInt1 / 2 * 5097600000L;
  }
  
  final int d()
  {
    return 292271022;
  }
  
  final long d(long paramLong, int paramInt)
  {
    int j = b(paramLong, a(paramLong));
    int k = h(paramLong);
    int i = j;
    if (j > 354)
    {
      i = j;
      if (!d(paramInt)) {
        i = j - 1;
      }
    }
    paramLong = a(paramInt, 1, i);
    return k + paramLong;
  }
  
  final boolean d(int paramInt)
  {
    return (this.d.b & 1 << paramInt % 30) > 0;
  }
  
  final int e(int paramInt)
  {
    if (paramInt == 12) {}
    while ((paramInt - 1) % 2 == 0) {
      return 30;
    }
    return 29;
  }
  
  final long f()
  {
    return 30617280288L;
  }
  
  final long f(int paramInt)
  {
    if (paramInt > 292271022) {
      throw new ArithmeticException("Year is too large: " + paramInt + " > 292271022");
    }
    if (paramInt < -292269337) {
      throw new ArithmeticException("Year is too small: " + paramInt + " < -292269337");
    }
    int i = paramInt - 1;
    long l1 = i / 30;
    paramInt = 1;
    l1 = l1 * 918518400000L - 42521587200000L;
    if (paramInt < i % 30 + 1)
    {
      if (d(paramInt)) {}
      for (long l2 = 30672000000L;; l2 = 30585600000L)
      {
        paramInt += 1;
        l1 = l2 + l1;
        break;
      }
    }
    return l1;
  }
  
  final long g()
  {
    return 15308640144L;
  }
  
  public final LeapYearPatternType getLeapYearPatternType()
  {
    return this.d;
  }
  
  final long h()
  {
    return 2551440384L;
  }
  
  public final int hashCode()
  {
    return super.hashCode() * 13 + getLeapYearPatternType().hashCode();
  }
  
  final long i()
  {
    return 21260793600000L;
  }
  
  public final Chronology withUTC()
  {
    return c;
  }
  
  public final Chronology withZone(DateTimeZone paramDateTimeZone)
  {
    DateTimeZone localDateTimeZone = paramDateTimeZone;
    if (paramDateTimeZone == null) {
      localDateTimeZone = DateTimeZone.getDefault();
    }
    if (localDateTimeZone == getZone()) {
      return this;
    }
    return getInstance(localDateTimeZone);
  }
  
  public static class LeapYearPatternType
    implements Serializable
  {
    private static final long serialVersionUID = 26581275372698L;
    final byte a;
    final int b;
    
    LeapYearPatternType(int paramInt1, int paramInt2)
    {
      this.a = ((byte)paramInt1);
      this.b = paramInt2;
    }
    
    private Object readResolve()
    {
      switch (this.a)
      {
      default: 
        return this;
      case 0: 
        return IslamicChronology.LEAP_YEAR_15_BASED;
      case 1: 
        return IslamicChronology.LEAP_YEAR_16_BASED;
      case 2: 
        return IslamicChronology.LEAP_YEAR_INDIAN;
      }
      return IslamicChronology.LEAP_YEAR_HABASH_AL_HASIB;
    }
  }
}


/* Location:              /home/merong/decompile/hackery-dex2jar.jar!/org/joda/time/chrono/IslamicChronology.class
 * Java compiler version: 6 (50.0)
 * JD-Core Version:       0.7.1
 */