/** * @bug 4103341 */ void DateFormatRegressionTest::Test4103341(void) { TimeZone *saveZone =TimeZone::createDefault(); //try { // {sfb} changed from setDefault to adoptDefault TimeZone::adoptDefault(TimeZone::createTimeZone("CST")); UErrorCode status = U_ZERO_ERROR; SimpleDateFormat *simple = new SimpleDateFormat(UnicodeString("MM/dd/yyyy HH:mm"), status); if(U_FAILURE(status)) { dataerrln("Couldn't create SimpleDateFormat, error %s", u_errorName(status)); delete simple; return; } failure(status, "new SimpleDateFormat"); TimeZone *temp = TimeZone::createDefault(); if(simple->getTimeZone() != *temp) errln("Fail: SimpleDateFormat not using default zone"); //} //finally { TimeZone::adoptDefault(saveZone); //} delete temp; delete simple; }
/** * @bug 4089106 */ void DateFormatRegressionTest::Test4089106(void) { TimeZone *def = TimeZone::createDefault(); //try { TimeZone *z = new SimpleTimeZone((int)(1.25 * 3600000), "FAKEZONE"); TimeZone::setDefault(*z); UErrorCode status = U_ZERO_ERROR; SimpleDateFormat *f = new SimpleDateFormat(status); if(U_FAILURE(status)) { dataerrln("Couldn't create SimpleDateFormat, error %s", u_errorName(status)); delete f; delete def; delete z; return; } failure(status, "new SimpleDateFormat"); if (f->getTimeZone()!= *z) errln("Fail: SimpleTimeZone should use TimeZone.getDefault()"); //} //finally { TimeZone::setDefault(*def); //} delete z; delete f; delete def; }
std::string GlobalizationNDK::getDatePattern(const std::string& args) { DateFormat::EStyle dstyle = DateFormat::kShort, tstyle = DateFormat::kShort; if (!args.empty()) { Json::Reader reader; Json::Value root; bool parse = reader.parse(args, root); if (!parse) { slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getDatePattern: invalid json data: %s", args.c_str()); return errorInJson(PARSING_ERROR, "Parameters not valid json format!"); } Json::Value options = root["options"]; std::string error; if (!handleDateOptions(options, dstyle, tstyle, error)) return errorInJson(PARSING_ERROR, error); } UErrorCode status = U_ZERO_ERROR; const Locale& loc = Locale::getDefault(); DateFormat* df = DateFormat::createDateTimeInstance(dstyle, tstyle, loc); if (!df) { slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getDatePattern: unable to create DateFormat instance!"); return errorInJson(UNKNOWN_ERROR, "Unable to create DateFormat instance!"); } std::auto_ptr<DateFormat> deleter(df); if (df->getDynamicClassID() != SimpleDateFormat::getStaticClassID()) { slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::getDatePattern: DateFormat instance not SimpleDateFormat!"); return errorInJson(UNKNOWN_ERROR, "DateFormat instance not SimpleDateFormat!"); } SimpleDateFormat* sdf = (SimpleDateFormat*) df; UnicodeString pt; sdf->toPattern(pt); std::string ptUtf8; pt.toUTF8String(ptUtf8); const TimeZone& tz = sdf->getTimeZone(); UnicodeString tzName; tz.getDisplayName(tzName); std::string tzUtf8; tzName.toUTF8String(tzUtf8); int utc_offset = tz.getRawOffset() / 1000; // UTC_OFFSET in seconds. int dst_offset = tz.getDSTSavings() / 1000; // DST_OFFSET in seconds; return resultInJson(ptUtf8, tzUtf8, utc_offset, dst_offset); }
std::string GlobalizationNDK::isDayLightSavingsTime(const std::string& args) { if (args.empty()) { slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::isDayLightSavingsTime: no date provided."); return errorInJson(UNKNOWN_ERROR, "No date is provided!"); } Json::Reader reader; Json::Value root; bool parse = reader.parse(args, root); if (!parse) { slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::isDayLightSavingsTime: invalid json data: %s", args.c_str()); return errorInJson(PARSING_ERROR, "Parameters not valid json format!"); } Json::Value dv = root["date"]; if (!dv.isNumeric()) { slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::isDayLightSavingsTime: invalid date format: %d", dv.type()); return errorInJson(PARSING_ERROR, "Invalid date format!"); } double date = dv.asDouble(); UErrorCode status = U_ZERO_ERROR; SimpleDateFormat* sdf = new SimpleDateFormat(status); if (!sdf) { slog2f(0, ID_G11N, SLOG2_ERROR, "GlobalizationNDK::isDayLightSavingsTime: unable to create SimpleDateFormat instance: %d.", status); return errorInJson(UNKNOWN_ERROR, "Unable to create SimpleDateFormat instance!"); } const TimeZone& tz = sdf->getTimeZone(); bool result = tz.inDaylightTime(date, status); return resultInJson(result); }