import typing

import java
import java.chaquopy
import java.io
import java.lang
import java.time
import java.util

class ZoneOffsetTransition(java.io.Serializable, java.lang.Comparable[ZoneOffsetTransition]):
    def compareTo(self, transition: ZoneOffsetTransition, /) -> int: ...
    def equals(self, other: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getDateTimeAfter(self) -> java.time.LocalDateTime: ...
    def getDateTimeBefore(self) -> java.time.LocalDateTime: ...
    def getDuration(self) -> java.time.Duration: ...
    def getInstant(self) -> java.time.Instant: ...
    def getOffsetAfter(self) -> java.time.ZoneOffset: ...
    def getOffsetBefore(self) -> java.time.ZoneOffset: ...
    def hashCode(self) -> int: ...
    def isGap(self) -> bool: ...
    def isOverlap(self) -> bool: ...
    def isValidOffset(self, offset: java.time.ZoneOffset, /) -> bool: ...
    @staticmethod
    def of(transition: java.time.LocalDateTime, offsetBefore: java.time.ZoneOffset, offsetAfter: java.time.ZoneOffset, /) -> ZoneOffsetTransition: ...
    def toEpochSecond(self) -> int: ...
    def toString(self) -> str: ...

class ZoneOffsetTransitionRule(java.io.Serializable):
    def createTransition(self, year: int | java.jint | java.lang.Integer, /) -> ZoneOffsetTransition: ...
    def equals(self, otherRule: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getDayOfMonthIndicator(self) -> int: ...
    def getDayOfWeek(self) -> java.time.DayOfWeek: ...
    def getLocalTime(self) -> java.time.LocalTime: ...
    def getMonth(self) -> java.time.Month: ...
    def getOffsetAfter(self) -> java.time.ZoneOffset: ...
    def getOffsetBefore(self) -> java.time.ZoneOffset: ...
    def getStandardOffset(self) -> java.time.ZoneOffset: ...
    def getTimeDefinition(self) -> ZoneOffsetTransitionRule.TimeDefinition: ...
    def hashCode(self) -> int: ...
    def isMidnightEndOfDay(self) -> bool: ...
    @staticmethod
    def of(month: java.time.Month, dayOfMonthIndicator: int | java.jint | java.lang.Integer, dayOfWeek: java.time.DayOfWeek, time: java.time.LocalTime, timeEndOfDay: bool | java.jboolean | java.lang.Boolean, timeDefinition: ZoneOffsetTransitionRule.TimeDefinition, standardOffset: java.time.ZoneOffset, offsetBefore: java.time.ZoneOffset, offsetAfter: java.time.ZoneOffset, /) -> ZoneOffsetTransitionRule: ...
    def toString(self) -> str: ...

    class TimeDefinition(java.lang.Enum[ZoneOffsetTransitionRule.TimeDefinition]):
        STANDARD: typing.ClassVar[ZoneOffsetTransitionRule.TimeDefinition] = ...
        UTC: typing.ClassVar[ZoneOffsetTransitionRule.TimeDefinition] = ...
        WALL: typing.ClassVar[ZoneOffsetTransitionRule.TimeDefinition] = ...
        def createDateTime(self, dateTime: java.time.LocalDateTime, standardOffset: java.time.ZoneOffset, wallOffset: java.time.ZoneOffset, /) -> java.time.LocalDateTime: ...
        @staticmethod
        def valueOf(name: str | java.lang.String, /) -> ZoneOffsetTransitionRule.TimeDefinition: ...
        @staticmethod
        def values() -> java.chaquopy.JavaArray[ZoneOffsetTransitionRule.TimeDefinition]: ...

class ZoneRules(java.io.Serializable):
    def equals(self, otherRules: java.lang.Object | int | bool | float | str, /) -> bool: ...
    def getDaylightSavings(self, instant: java.time.Instant, /) -> java.time.Duration: ...
    @typing.overload
    def getOffset(self, instant: java.time.Instant, /) -> java.time.ZoneOffset: ...
    @typing.overload
    def getOffset(self, localDateTime: java.time.LocalDateTime, /) -> java.time.ZoneOffset: ...
    def getStandardOffset(self, instant: java.time.Instant, /) -> java.time.ZoneOffset: ...
    def getTransition(self, localDateTime: java.time.LocalDateTime, /) -> ZoneOffsetTransition: ...
    def getTransitionRules(self) -> java.util.List[ZoneOffsetTransitionRule]: ...
    def getTransitions(self) -> java.util.List[ZoneOffsetTransition]: ...
    def getValidOffsets(self, localDateTime: java.time.LocalDateTime, /) -> java.util.List[java.time.ZoneOffset]: ...
    def hashCode(self) -> int: ...
    def isDaylightSavings(self, instant: java.time.Instant, /) -> bool: ...
    def isFixedOffset(self) -> bool: ...
    def isValidOffset(self, localDateTime: java.time.LocalDateTime, offset: java.time.ZoneOffset, /) -> bool: ...
    def nextTransition(self, instant: java.time.Instant, /) -> ZoneOffsetTransition: ...
    @typing.overload
    @staticmethod
    def of(offset: java.time.ZoneOffset, /) -> ZoneRules: ...
    @typing.overload
    @staticmethod
    def of(baseStandardOffset: java.time.ZoneOffset, baseWallOffset: java.time.ZoneOffset, standardOffsetTransitionList: java.util.List[ZoneOffsetTransition], transitionList: java.util.List[ZoneOffsetTransition], lastRules: java.util.List[ZoneOffsetTransitionRule], /) -> ZoneRules: ...
    def previousTransition(self, instant: java.time.Instant, /) -> ZoneOffsetTransition: ...
    def toString(self) -> str: ...

class ZoneRulesException(java.time.DateTimeException):
    @typing.overload
    def __init__(self, message: str | java.lang.String, /) -> None: ...
    @typing.overload
    def __init__(self, message: str | java.lang.String, cause: java.lang.Throwable, /) -> None: ...
