本文整理汇总了C++中TimeZone::getOffset方法的典型用法代码示例。如果您正苦于以下问题:C++ TimeZone::getOffset方法的具体用法?C++ TimeZone::getOffset怎么用?C++ TimeZone::getOffset使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TimeZone
的用法示例。
在下文中一共展示了TimeZone::getOffset方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
/**
* @bug 4084933
* The expected behavior of TimeZone around the boundaries is:
* (Assume transition time of 2:00 AM)
* day of onset 1:59 AM STD = display name 1:59 AM ST
* 2:00 AM STD = display name 3:00 AM DT
* day of end 0:59 AM STD = display name 1:59 AM DT
* 1:00 AM STD = display name 1:00 AM ST
*/
void TimeZoneRegressionTest:: Test4084933() {
UErrorCode status = U_ZERO_ERROR;
TimeZone *tz = TimeZone::createTimeZone("PST");
int32_t offset1 = tz->getOffset(1,
1997, UCAL_OCTOBER, 26, UCAL_SUNDAY, (2*60*60*1000), status);
int32_t offset2 = tz->getOffset(1,
1997, UCAL_OCTOBER, 26, UCAL_SUNDAY, (2*60*60*1000)-1, status);
int32_t offset3 = tz->getOffset(1,
1997, UCAL_OCTOBER, 26, UCAL_SUNDAY, (1*60*60*1000), status);
int32_t offset4 = tz->getOffset(1,
1997, UCAL_OCTOBER, 26, UCAL_SUNDAY, (1*60*60*1000)-1, status);
/*
* The following was added just for consistency. It shows that going *to* Daylight
* Savings Time (PDT) does work at 2am.
*/
int32_t offset5 = tz->getOffset(1,
1997, UCAL_APRIL, 6, UCAL_SUNDAY, (2*60*60*1000), status);
int32_t offset6 = tz->getOffset(1,
1997, UCAL_APRIL, 6, UCAL_SUNDAY, (2*60*60*1000)-1, status);
int32_t offset5a = tz->getOffset(1,
1997, UCAL_APRIL, 6, UCAL_SUNDAY, (3*60*60*1000), status);
int32_t offset6a = tz->getOffset(1,
1997, UCAL_APRIL, 6, UCAL_SUNDAY, (3*60*60*1000)-1, status);
int32_t offset7 = tz->getOffset(1,
1997, UCAL_APRIL, 6, UCAL_SUNDAY, (1*60*60*1000), status);
int32_t offset8 = tz->getOffset(1,
1997, UCAL_APRIL, 6, UCAL_SUNDAY, (1*60*60*1000)-1, status);
int32_t SToffset = (int32_t)(-8 * 60*60*1000L);
int32_t DToffset = (int32_t)(-7 * 60*60*1000L);
#define ERR_IF_FAIL(x) if(x) { dataerrln("FAIL: TimeZone misbehaving - %s", #x); }
ERR_IF_FAIL(U_FAILURE(status))
ERR_IF_FAIL(offset1 != SToffset)
ERR_IF_FAIL(offset2 != SToffset)
ERR_IF_FAIL(offset3 != SToffset)
ERR_IF_FAIL(offset4 != DToffset)
ERR_IF_FAIL(offset5 != DToffset)
ERR_IF_FAIL(offset6 != SToffset)
ERR_IF_FAIL(offset5a != DToffset)
ERR_IF_FAIL(offset6a != DToffset)
ERR_IF_FAIL(offset7 != SToffset)
ERR_IF_FAIL(offset8 != SToffset)
#undef ERR_IF_FAIL
delete tz;
}
示例2: if
U_CAPI int32_t U_EXPORT2
ucal_getDSTSavings(const UChar* zoneID, UErrorCode* ec) {
int32_t result = 0;
TimeZone* zone = _createTimeZone(zoneID, -1, ec);
if (U_SUCCESS(*ec)) {
SimpleTimeZone* stz = dynamic_cast<SimpleTimeZone*>(zone);
if (stz != NULL) {
result = stz->getDSTSavings();
} else {
// Since there is no getDSTSavings on TimeZone, we use a
// heuristic: Starting with the current time, march
// forwards for one year, looking for DST savings.
// Stepping by weeks is sufficient.
UDate d = Calendar::getNow();
for (int32_t i=0; i<53; ++i, d+=U_MILLIS_PER_DAY*7.0) {
int32_t raw, dst;
zone->getOffset(d, FALSE, raw, dst, *ec);
if (U_FAILURE(*ec)) {
break;
} else if (dst != 0) {
result = dst;
break;
}
}
}
}
delete zone;
return result;
}
示例3: offsetFromUtcToTz
int TimezoneUtils::offsetFromUtcToTz(QDateTime date, QString timezoneId, bool ignoreDstOffset, bool* error)
{
int offset = 0;
UErrorCode errorCode = U_ZERO_ERROR;
// get timezone object
TimeZone* tz = TimeZone::createTimeZone(reinterpret_cast<UChar*>(timezoneId.data()));
if (!tz) {
*error = true;
return 0;
}
UnicodeString name;
tz->getDisplayName(name);
// get offset
// cal takes ownership of tz - tried to delete it and got an error
Calendar* cal = Calendar::createInstance(tz, errorCode);
if (!cal || errorCode > 0) {
*error = true;
return 0;
}
cal->set(date.date().year(), date.date().month(), date.date().day(), date.time().hour(), date.time().minute());
UDate udate = cal->getTime(errorCode);
if (errorCode > 0) {
*error = true;
delete cal;
return 0;
}
UBool isGmt = false;
int32_t rawOffset = 0;
int32_t dstOffset = 0;
tz->getOffset(udate, isGmt, rawOffset, dstOffset, errorCode);
if (errorCode > 0) {
*error = true;
delete cal;
return 0;
}
if (!ignoreDstOffset) {
offset = rawOffset + dstOffset;
} else {
offset = rawOffset;
}
delete cal;
offset /= 1000;
*error = false;
return offset;
}
示例4: dataerrln
/**
* @bug 4126678
* CANNOT REPRODUDE
*
* Yet another _alleged_ bug in TimeZone::getOffset(), a method that never
* should have been made public. It's simply too hard to use correctly.
*
* The original test code failed to do the following:
* (1) Call Calendar::setTime() before getting the fields!
* (2) Use the right millis (as usual) for getOffset(); they were passing
* in the MILLIS field, instead of the STANDARD MILLIS IN DAY.
* When you fix these two problems, the test passes, as expected.
*/
void TimeZoneRegressionTest:: Test4126678()
{
UErrorCode status = U_ZERO_ERROR;
Calendar *cal = Calendar::createInstance(status);
if(U_FAILURE(status)) {
dataerrln("Error creating calendar %s", u_errorName(status));
delete cal;
return;
}
failure(status, "Calendar::createInstance");
TimeZone *tz = TimeZone::createTimeZone("PST");
cal->adoptTimeZone(tz);
cal->set(1998, UCAL_APRIL, 5, 10, 0);
if (! tz->useDaylightTime() || U_FAILURE(status))
dataerrln("We're not in Daylight Savings Time and we should be. - %s", u_errorName(status));
//cal.setTime(dt);
int32_t era = cal->get(UCAL_ERA, status);
int32_t year = cal->get(UCAL_YEAR, status);
int32_t month = cal->get(UCAL_MONTH, status);
int32_t day = cal->get(UCAL_DATE, status);
int32_t dayOfWeek = cal->get(UCAL_DAY_OF_WEEK, status);
int32_t millis = cal->get(UCAL_MILLISECOND, status) +
(cal->get(UCAL_SECOND, status) +
(cal->get(UCAL_MINUTE, status) +
(cal->get(UCAL_HOUR, status) * 60) * 60) * 1000) -
cal->get(UCAL_DST_OFFSET, status);
failure(status, "cal->get");
int32_t offset = tz->getOffset((uint8_t)era, year, month, day, (uint8_t)dayOfWeek, millis, status);
int32_t raw_offset = tz->getRawOffset();
if (offset == raw_offset)
dataerrln("Offsets should match");
delete cal;
}
示例5: TIME_Get_offset
void TIME_Get_offset(sLONG_PTR *pResult, PackagePtr pParams)
{
C_REAL AbsoluteIn;
C_TEXT ZoneIn;
C_LONGINT OffsetOut;
C_LONGINT DstOut;
C_LONGINT returnValue;
AbsoluteIn.fromParamAtIndex(pParams, 1);
ZoneIn.fromParamAtIndex(pParams, 2);
UErrorCode status = U_ZERO_ERROR;
UnicodeString zoneId = UnicodeString((const UChar *)ZoneIn.getUTF16StringPtr());
TimeZone *zone = TimeZone::createTimeZone(zoneId);
if(zone){
int32_t rawOffset, dstOffset;
UDate date = AbsoluteIn.getDoubleValue();
zone->getOffset(date, true, rawOffset, dstOffset, status);
OffsetOut.setIntValue(rawOffset);
DstOut.setIntValue(dstOffset);
delete zone;
}else{
status = U_ILLEGAL_ARGUMENT_ERROR;
}
returnValue.setIntValue(status);
OffsetOut.toParamAtIndex(pParams, 3);
DstOut.toParamAtIndex(pParams, 4);
returnValue.setReturn(pResult);
}
示例6: getTimeZonesNative
static void getTimeZonesNative(JNIEnv* env, jclass clazz,
jobjectArray outerArray, jstring locale) {
// get all timezone objects
jobjectArray zoneIdArray = (jobjectArray) env->GetObjectArrayElement(outerArray, 0);
int count = env->GetArrayLength(zoneIdArray);
TimeZone* zones[count];
for(int i = 0; i < count; i++) {
jstring id = (jstring) env->GetObjectArrayElement(zoneIdArray, i);
zones[i] = timeZoneFromId(env, id);
env->DeleteLocalRef(id);
}
Locale loc = getLocale(env, locale);
UErrorCode status = U_ZERO_ERROR;
UnicodeString longPattern("zzzz","");
SimpleDateFormat longFormat(longPattern, loc, status);
UnicodeString shortPattern("z","");
SimpleDateFormat shortFormat(shortPattern, loc, status);
jobjectArray longStdTimeArray = (jobjectArray) env->GetObjectArrayElement(outerArray, 1);
jobjectArray shortStdTimeArray = (jobjectArray) env->GetObjectArrayElement(outerArray, 2);
jobjectArray longDlTimeArray = (jobjectArray) env->GetObjectArrayElement(outerArray, 3);
jobjectArray shortDlTimeArray = (jobjectArray) env->GetObjectArrayElement(outerArray, 4);
// 15th January 2008
UDate date1 = 1203105600000.0;
// 15th July 2008
UDate date2 = 1218826800000.0;
for (int i = 0; i < count; ++i) {
TimeZone* tz = zones[i];
longFormat.setTimeZone(*tz);
shortFormat.setTimeZone(*tz);
int32_t daylightOffset;
int32_t rawOffset;
tz->getOffset(date1, false, rawOffset, daylightOffset, status);
UDate standardDate;
UDate daylightSavingDate;
if (daylightOffset != 0) {
// The Timezone is reporting that we are in daylight time
// for the winter date. The dates are for the wrong hemisphere,
// swap them.
standardDate = date2;
daylightSavingDate = date1;
} else {
standardDate = date1;
daylightSavingDate = date2;
}
jstring content = formatDate(env, shortFormat, daylightSavingDate);
env->SetObjectArrayElement(shortDlTimeArray, i, content);
env->DeleteLocalRef(content);
content = formatDate(env, shortFormat, standardDate);
env->SetObjectArrayElement(shortStdTimeArray, i, content);
env->DeleteLocalRef(content);
content = formatDate(env, longFormat, daylightSavingDate);
env->SetObjectArrayElement(longDlTimeArray, i, content);
env->DeleteLocalRef(content);
content = formatDate(env, longFormat, standardDate);
env->SetObjectArrayElement(longStdTimeArray, i, content);
env->DeleteLocalRef(content);
delete tz;
}
}
示例7: tzID
UnicodeString&
TZGNCore::formatGenericNonLocationName(const TimeZone& tz, UTimeZoneGenericNameType type, UDate date, UnicodeString& name) const {
U_ASSERT(type == UTZGNM_LONG || type == UTZGNM_SHORT);
name.setToBogus();
const UChar* uID = ZoneMeta::getCanonicalCLDRID(tz);
if (uID == NULL) {
return name;
}
UnicodeString tzID(TRUE, uID, -1);
// Try to get a name from time zone first
UTimeZoneNameType nameType = (type == UTZGNM_LONG) ? UTZNM_LONG_GENERIC : UTZNM_SHORT_GENERIC;
fTimeZoneNames->getTimeZoneDisplayName(tzID, nameType, name);
if (!name.isEmpty()) {
return name;
}
// Try meta zone
UChar mzIDBuf[32];
UnicodeString mzID(mzIDBuf, 0, UPRV_LENGTHOF(mzIDBuf));
fTimeZoneNames->getMetaZoneID(tzID, date, mzID);
if (!mzID.isEmpty()) {
UErrorCode status = U_ZERO_ERROR;
UBool useStandard = FALSE;
int32_t raw, sav;
UChar tmpNameBuf[64];
tz.getOffset(date, FALSE, raw, sav, status);
if (U_FAILURE(status)) {
return name;
}
if (sav == 0) {
useStandard = TRUE;
TimeZone *tmptz = tz.clone();
// Check if the zone actually uses daylight saving time around the time
BasicTimeZone *btz = NULL;
if (dynamic_cast<OlsonTimeZone *>(tmptz) != NULL
|| dynamic_cast<SimpleTimeZone *>(tmptz) != NULL
|| dynamic_cast<RuleBasedTimeZone *>(tmptz) != NULL
|| dynamic_cast<VTimeZone *>(tmptz) != NULL) {
btz = (BasicTimeZone*)tmptz;
}
if (btz != NULL) {
TimeZoneTransition before;
UBool beforTrs = btz->getPreviousTransition(date, TRUE, before);
if (beforTrs
&& (date - before.getTime() < kDstCheckRange)
&& before.getFrom()->getDSTSavings() != 0) {
useStandard = FALSE;
} else {
TimeZoneTransition after;
UBool afterTrs = btz->getNextTransition(date, FALSE, after);
if (afterTrs
&& (after.getTime() - date < kDstCheckRange)
&& after.getTo()->getDSTSavings() != 0) {
useStandard = FALSE;
}
}
} else {
// If not BasicTimeZone... only if the instance is not an ICU's implementation.
// We may get a wrong answer in edge case, but it should practically work OK.
tmptz->getOffset(date - kDstCheckRange, FALSE, raw, sav, status);
if (sav != 0) {
useStandard = FALSE;
} else {
tmptz->getOffset(date + kDstCheckRange, FALSE, raw, sav, status);
if (sav != 0){
useStandard = FALSE;
}
}
if (U_FAILURE(status)) {
delete tmptz;
return name;
}
}
delete tmptz;
}
if (useStandard) {
UTimeZoneNameType stdNameType = (nameType == UTZNM_LONG_GENERIC)
? UTZNM_LONG_STANDARD : UTZNM_SHORT_STANDARD;
UnicodeString stdName(tmpNameBuf, 0, UPRV_LENGTHOF(tmpNameBuf));
fTimeZoneNames->getDisplayName(tzID, stdNameType, date, stdName);
if (!stdName.isEmpty()) {
name.setTo(stdName);
// TODO: revisit this issue later
// In CLDR, a same display name is used for both generic and standard
// for some meta zones in some locales. This looks like a data bugs.
// For now, we check if the standard name is different from its generic
// name below.
UChar genNameBuf[64];
UnicodeString mzGenericName(genNameBuf, 0, UPRV_LENGTHOF(genNameBuf));
fTimeZoneNames->getMetaZoneDisplayName(mzID, nameType, mzGenericName);
if (stdName.caseCompare(mzGenericName, 0) == 0) {
//.........这里部分代码省略.........
示例8: sizeof
/**
* @bug 4154650
* SimpleTimeZone.getOffset accepts illegal arguments.
*/
void
TimeZoneRegressionTest::Test4154650()
{
const int32_t GOOD = 1, BAD = 0;
const int32_t GOOD_ERA = GregorianCalendar::AD, GOOD_YEAR = 1998, GOOD_MONTH = UCAL_AUGUST;
const int32_t GOOD_DAY = 2, GOOD_DOW = UCAL_SUNDAY, GOOD_TIME = 16*3600000;
int32_t DATA []= {
GOOD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, GOOD_TIME,
GOOD, GregorianCalendar::BC, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, GOOD_TIME,
GOOD, GregorianCalendar::AD, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, GOOD_TIME,
BAD, GregorianCalendar::BC-1, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, GOOD_TIME,
BAD, GregorianCalendar::AD+1, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, GOOD_TIME,
GOOD, GOOD_ERA, GOOD_YEAR, UCAL_JANUARY, GOOD_DAY, GOOD_DOW, GOOD_TIME,
GOOD, GOOD_ERA, GOOD_YEAR, UCAL_DECEMBER, GOOD_DAY, GOOD_DOW, GOOD_TIME,
BAD, GOOD_ERA, GOOD_YEAR, UCAL_JANUARY-1, GOOD_DAY, GOOD_DOW, GOOD_TIME,
BAD, GOOD_ERA, GOOD_YEAR, UCAL_DECEMBER+1, GOOD_DAY, GOOD_DOW, GOOD_TIME,
GOOD, GOOD_ERA, GOOD_YEAR, UCAL_JANUARY, 1, GOOD_DOW, GOOD_TIME,
GOOD, GOOD_ERA, GOOD_YEAR, UCAL_JANUARY, 31, GOOD_DOW, GOOD_TIME,
BAD, GOOD_ERA, GOOD_YEAR, UCAL_JANUARY, 0, GOOD_DOW, GOOD_TIME,
BAD, GOOD_ERA, GOOD_YEAR, UCAL_JANUARY, 32, GOOD_DOW, GOOD_TIME,
GOOD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, UCAL_SUNDAY, GOOD_TIME,
GOOD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, UCAL_SATURDAY, GOOD_TIME,
BAD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, UCAL_SUNDAY-1, GOOD_TIME,
BAD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, UCAL_SATURDAY+1, GOOD_TIME,
GOOD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, 0,
GOOD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, 24*3600000-1,
BAD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, -1,
BAD, GOOD_ERA, GOOD_YEAR, GOOD_MONTH, GOOD_DAY, GOOD_DOW, 24*3600000,
};
int32_t dataLen = (int32_t)(sizeof(DATA) / sizeof(DATA[0]));
UErrorCode status = U_ZERO_ERROR;
TimeZone *tz = TimeZone::createDefault();
for(int32_t i = 0; i < dataLen; i += 7) {
UBool good = DATA[i] == GOOD;
//IllegalArgumentException e = null;
//try {
/*int32_t offset = */
tz->getOffset((uint8_t)DATA[i+1], DATA[i+2], DATA[i+3],
DATA[i+4], (uint8_t)DATA[i+5], DATA[i+6], status);
//} catch (IllegalArgumentException ex) {
// e = ex;
//}
if(good != U_SUCCESS(status)) {
UnicodeString errMsg;
if (good) {
errMsg = (UnicodeString(") threw ") + u_errorName(status));
}
else {
errMsg = UnicodeString(") accepts invalid args", "");
}
errln(UnicodeString("Fail: getOffset(") +
DATA[i+1] + ", " + DATA[i+2] + ", " + DATA[i+3] + ", " +
DATA[i+4] + ", " + DATA[i+5] + ", " + DATA[i+6] +
errMsg);
}
status = U_ZERO_ERROR; // reset
}
delete tz;
}
示例9: SimpleTimeZone
// test new API for JDK 1.2 8/31 putback
void
TimeZoneRegressionTest::TestJDK12API()
{
// TimeZone *pst = TimeZone::createTimeZone("PST");
// TimeZone *cst1 = TimeZone::createTimeZone("CST");
UErrorCode ec = U_ZERO_ERROR;
//d,-28800,3,1,-1,120,w,9,-1,1,120,w,60
TimeZone *pst = new SimpleTimeZone(-28800*U_MILLIS_PER_SECOND,
"PST",
3,1,-1,120*U_MILLIS_PER_MINUTE,
SimpleTimeZone::WALL_TIME,
9,-1,1,120*U_MILLIS_PER_MINUTE,
SimpleTimeZone::WALL_TIME,
60*U_MILLIS_PER_MINUTE,ec);
//d,-21600,3,1,-1,120,w,9,-1,1,120,w,60
TimeZone *cst1 = new SimpleTimeZone(-21600*U_MILLIS_PER_SECOND,
"CST",
3,1,-1,120*U_MILLIS_PER_MINUTE,
SimpleTimeZone::WALL_TIME,
9,-1,1,120*U_MILLIS_PER_MINUTE,
SimpleTimeZone::WALL_TIME,
60*U_MILLIS_PER_MINUTE,ec);
if (U_FAILURE(ec)) {
errln("FAIL: SimpleTimeZone constructor");
return;
}
SimpleTimeZone *cst = dynamic_cast<SimpleTimeZone *>(cst1);
if(pst->hasSameRules(*cst)) {
errln("FAILURE: PST and CST have same rules");
}
UErrorCode status = U_ZERO_ERROR;
int32_t offset1 = pst->getOffset(1,
1997, UCAL_OCTOBER, 26, UCAL_SUNDAY, (2*60*60*1000), status);
failure(status, "getOffset() failed");
int32_t offset2 = cst->getOffset(1,
1997, UCAL_OCTOBER, 26, UCAL_SUNDAY, (2*60*60*1000), 31, status);
failure(status, "getOffset() failed");
if(offset1 == offset2)
errln("FAILURE: Sunday Oct. 26 1997 2:00 has same offset for PST and CST");
// verify error checking
pst->getOffset(1,
1997, UCAL_FIELD_COUNT+1, 26, UCAL_SUNDAY, (2*60*60*1000), status);
if(U_SUCCESS(status))
errln("FAILURE: getOffset() succeeded with -1 for month");
status = U_ZERO_ERROR;
cst->setDSTSavings(60*60*1000, status);
failure(status, "setDSTSavings() failed");
int32_t savings = cst->getDSTSavings();
if(savings != 60*60*1000) {
errln("setDSTSavings() failed");
}
delete pst;
delete cst;
}
示例10: verifyMapping
//.........这里部分代码省略.........
TimeZone* pst = TimeZone::createTimeZone("PST");
Calendar* tempcal = Calendar::createInstance(pst, status);
if(U_SUCCESS(status)){
verifyMapping(*tempcal, 1997, Calendar::APRIL, 3, 0, 238904.0);
verifyMapping(*tempcal, 1997, Calendar::APRIL, 4, 0, 238928.0);
verifyMapping(*tempcal, 1997, Calendar::APRIL, 5, 0, 238952.0);
verifyMapping(*tempcal, 1997, Calendar::APRIL, 5, 23, 238975.0);
verifyMapping(*tempcal, 1997, Calendar::APRIL, 6, 0, 238976.0);
verifyMapping(*tempcal, 1997, Calendar::APRIL, 6, 1, 238977.0);
verifyMapping(*tempcal, 1997, Calendar::APRIL, 6, 3, 238978.0);
}else{
dataerrln("Could not create calendar. Error: %s", u_errorName(status));
}
TimeZone* utc = TimeZone::createTimeZone("UTC");
Calendar* utccal = Calendar::createInstance(utc, status);
if(U_SUCCESS(status)){
verifyMapping(*utccal, 1997, Calendar::APRIL, 6, 0, 238968.0);
}else{
dataerrln("Could not create calendar. Error: %s", u_errorName(status));
}
TimeZone* save = TimeZone::createDefault();
TimeZone::setDefault(*pst);
if (tempcal != NULL) {
// DST changeover for PST is 4/6/1997 at 2 hours past midnight
// at 238978.0 epoch hours.
tempcal->clear();
tempcal->set(1997, Calendar::APRIL, 6);
UDate d = tempcal->getTime(status);
// i is minutes past midnight standard time
for (int i=-120; i<=180; i+=60)
{
UBool inDST = (i >= 120);
tempcal->setTime(d + i*60*1000, status);
verifyDST(tempcal->getTime(status),pst, TRUE, inDST, -8*ONE_HOUR,inDST ? -7*ONE_HOUR : -8*ONE_HOUR);
}
}
TimeZone::setDefault(*save);
delete save;
delete utccal;
delete tempcal;
#if 1
{
logln("--- Test a ---");
UDate d = date(97, UCAL_APRIL, 6);
TimeZone *z = TimeZone::createTimeZone("PST");
for (int32_t i = 60; i <= 180; i += 15) {
UBool inDST = (i >= 120);
UDate e = d + i * 60 * 1000;
verifyDST(e, z, TRUE, inDST, - 8 * ONE_HOUR, inDST ? - 7 * ONE_HOUR: - 8 * ONE_HOUR);
}
delete z;
}
#endif
#if 1
{
logln("--- Test b ---");
TimeZone *tz;
TimeZone::setDefault(*(tz = TimeZone::createTimeZone("PST")));
delete tz;
logln("========================================");
findDaylightBoundaryUsingDate(date(97, 0, 1), "PST", PST_1997_BEG);
logln("========================================");
findDaylightBoundaryUsingDate(date(97, 6, 1), "PDT", PST_1997_END);
}
#endif
#if 1
{
logln("--- Test c ---");
logln("========================================");
TimeZone* z = TimeZone::createTimeZone("Australia/Adelaide");
findDaylightBoundaryUsingTimeZone(date(97, 0, 1), TRUE, 859653000000.0, z);
logln("========================================");
findDaylightBoundaryUsingTimeZone(date(97, 6, 1), FALSE, 877797000000.0, z);
delete z;
}
#endif
#if 1
{
logln("--- Test d ---");
logln("========================================");
findDaylightBoundaryUsingTimeZone(date(97, 0, 1), FALSE, PST_1997_BEG);
logln("========================================");
findDaylightBoundaryUsingTimeZone(date(97, 6, 1), TRUE, PST_1997_END);
}
#endif
#if 0
{
logln("--- Test e ---");
TimeZone *z = TimeZone::createDefault();
logln(UnicodeString("") + z->getOffset(1, 97, 3, 4, 6, 0) + " " + date(97, 3, 4));
logln(UnicodeString("") + z->getOffset(1, 97, 3, 5, 7, 0) + " " + date(97, 3, 5));
logln(UnicodeString("") + z->getOffset(1, 97, 3, 6, 1, 0) + " " + date(97, 3, 6));
logln(UnicodeString("") + z->getOffset(1, 97, 3, 7, 2, 0) + " " + date(97, 3, 7));
delete z;
}
#endif
}
示例11: getTimeZonesNative
static void getTimeZonesNative(JNIEnv* env, jclass clazz,
jobjectArray outerArray, jstring locale) {
// LOGI("ENTER getTimeZonesNative");
UErrorCode status = U_ZERO_ERROR;
jobjectArray zoneIdArray;
jobjectArray longStdTimeArray;
jobjectArray shortStdTimeArray;
jobjectArray longDlTimeArray;
jobjectArray shortDlTimeArray;
jstring content;
jstring strObj;
const jchar *res;
UnicodeString resU;
jint length;
const UnicodeString *zoneID;
DateFormat *df;
UnicodeString longPattern("zzzz","");
UnicodeString shortPattern("z","");
Locale loc = getLocale(env, locale);
SimpleDateFormat longFormat(longPattern, loc, status);
SimpleDateFormat shortFormat(shortPattern, loc, status);
zoneIdArray = (jobjectArray) env->GetObjectArrayElement(outerArray, 0);
longStdTimeArray = (jobjectArray) env->GetObjectArrayElement(outerArray, 1);
shortStdTimeArray = (jobjectArray) env->GetObjectArrayElement(outerArray, 2);
longDlTimeArray = (jobjectArray) env->GetObjectArrayElement(outerArray, 3);
shortDlTimeArray = (jobjectArray) env->GetObjectArrayElement(outerArray, 4);
int count = env->GetArrayLength(zoneIdArray);
TimeZone* zones[count];
// get all timezone objects
for(int i = 0; i < count; i++) {
strObj = (jstring) env->GetObjectArrayElement(zoneIdArray, i);
length = env->GetStringLength(strObj);
res = env->GetStringChars(strObj, NULL);
const UnicodeString zoneID((UChar *)res, length);
env->ReleaseStringChars(strObj, res);
zones[i] = TimeZone::createTimeZone(zoneID);
}
// 15th January 2008
UDate date1 = 1203105600000.0;
// 15th July 2008
UDate date2 = 1218826800000.0;
for (int i = 0; i < count; i++) {
TimeZone *tz = zones[i];
longFormat.setTimeZone(*tz);
shortFormat.setTimeZone(*tz);
int32_t daylightOffset;
int32_t rawOffset;
UDate standardDate;
UDate daylightSavingDate;
tz->getOffset(date1, false, rawOffset, daylightOffset, status);
if (daylightOffset != 0) {
// The Timezone is reporting that we are in daylight time
// for the winter date. The dates are for the wrong hemisphere,
// swap them.
standardDate = date2;
daylightSavingDate = date1;
} else {
standardDate = date1;
daylightSavingDate = date2;
}
UnicodeString shortDayLight;
UnicodeString longDayLight;
UnicodeString shortStandard;
UnicodeString longStandard;
shortFormat.format(daylightSavingDate, shortDayLight);
content = getJStringFromUnicodeString(env, shortDayLight);
env->SetObjectArrayElement(shortDlTimeArray, i, content);
env->DeleteLocalRef(content);
shortFormat.format(standardDate, shortStandard);
content = getJStringFromUnicodeString(env, shortStandard);
env->SetObjectArrayElement(shortStdTimeArray, i, content);
env->DeleteLocalRef(content);
longFormat.format (daylightSavingDate, longDayLight);
content = getJStringFromUnicodeString(env, longDayLight);
env->SetObjectArrayElement(longDlTimeArray, i, content);
env->DeleteLocalRef(content);
longFormat.format (standardDate, longStandard);
content = getJStringFromUnicodeString(env, longStandard);
env->SetObjectArrayElement(longStdTimeArray, i, content);
env->DeleteLocalRef(content);
delete(tz);
//.........这里部分代码省略.........