Exemplo n.º 1
0
Arquivo: rbtz.cpp Projeto: Botyto/Core
TimeZoneRule *
RuleBasedTimeZone::findRuleInFinal(UDate date, UBool local,
                                   int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt) const
{
	if (fFinalRules == NULL)
	{
		return NULL;
	}

	AnnualTimeZoneRule * fr0 = (AnnualTimeZoneRule *)fFinalRules->elementAt(0);
	AnnualTimeZoneRule * fr1 = (AnnualTimeZoneRule *)fFinalRules->elementAt(1);
	if (fr0 == NULL || fr1 == NULL)
	{
		return NULL;
	}

	UDate start0, start1;
	UDate base;
	int32_t localDelta;

	base = date;
	if (local)
	{
		localDelta = getLocalDelta(fr1->getRawOffset(), fr1->getDSTSavings(),
		                           fr0->getRawOffset(), fr0->getDSTSavings(),
		                           NonExistingTimeOpt, DuplicatedTimeOpt);
		base -= localDelta;
	}
	UBool avail0 = fr0->getPreviousStart(base, fr1->getRawOffset(), fr1->getDSTSavings(), TRUE, start0);

	base = date;
	if (local)
	{
		localDelta = getLocalDelta(fr0->getRawOffset(), fr0->getDSTSavings(),
		                           fr1->getRawOffset(), fr1->getDSTSavings(),
		                           NonExistingTimeOpt, DuplicatedTimeOpt);
		base -= localDelta;
	}
	UBool avail1 = fr1->getPreviousStart(base, fr0->getRawOffset(), fr0->getDSTSavings(), TRUE, start1);

	if (avail0 && (!avail1 || start0 > start1))
	{
		return fr0;
	}
	else if (avail1)
	{
		return fr1;
	}
	return NULL;
}
Exemplo n.º 2
0
UDate
RuleBasedTimeZone::getTransitionTime(Transition* transition, UBool local,
                                     int32_t NonExistingTimeOpt, int32_t DuplicatedTimeOpt) const {
    UDate time = transition->time;
    if (local) {
        time += getLocalDelta(transition->from->getRawOffset(), transition->from->getDSTSavings(),
                              transition->to->getRawOffset(), transition->to->getDSTSavings(),
                              NonExistingTimeOpt, DuplicatedTimeOpt);
    }
    return time;
}