diff options
author | Nat Goodspeed <nat@lindenlab.com> | 2024-05-15 12:18:31 -0400 |
---|---|---|
committer | Nat Goodspeed <nat@lindenlab.com> | 2024-05-15 12:18:31 -0400 |
commit | 7ccf02515ad3f9e3bf795d651fe4b3c0d773f353 (patch) | |
tree | c4adc897c07f652e617e91fbf41c12b823acc808 /indra/newview/lldateutil.cpp | |
parent | 1abf5f18d6afc7ae9e1b1562b92e5c1ce33b722f (diff) | |
parent | e7eced3c87310b15ac20cc3cd470d67686104a14 (diff) |
Merge commit 'e7eced3' into lua-timers for whitespace fixes.
Diffstat (limited to 'indra/newview/lldateutil.cpp')
-rw-r--r-- | indra/newview/lldateutil.cpp | 280 |
1 files changed, 140 insertions, 140 deletions
diff --git a/indra/newview/lldateutil.cpp b/indra/newview/lldateutil.cpp index c7fc45f61e..246e2099f9 100644 --- a/indra/newview/lldateutil.cpp +++ b/indra/newview/lldateutil.cpp @@ -1,24 +1,24 @@ -/** +/** * @file lldateutil.cpp * * $LicenseInfo:firstyear=2009&license=viewerlgpl$ * Second Life Viewer Source Code * Copyright (C) 2010, Linden Research, Inc. -* +* * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License only. -* +* * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. -* +* * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -* +* * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ @@ -38,178 +38,178 @@ using namespace boost::gregorian; using namespace boost::posix_time; static S32 DAYS_PER_MONTH_NOLEAP[] = - { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; + { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; static S32 DAYS_PER_MONTH_LEAP[] = - { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; + { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; static S32 days_from_month(S32 year, S32 month) { - llassert_always(1 <= month); - llassert_always(month <= 12); - - if (year % 4 == 0 - && year % 100 != 0) - { - // leap year - return DAYS_PER_MONTH_LEAP[month - 1]; - } - else - { - return DAYS_PER_MONTH_NOLEAP[month - 1]; - } + llassert_always(1 <= month); + llassert_always(month <= 12); + + if (year % 4 == 0 + && year % 100 != 0) + { + // leap year + return DAYS_PER_MONTH_LEAP[month - 1]; + } + else + { + return DAYS_PER_MONTH_NOLEAP[month - 1]; + } } bool LLDateUtil::dateFromPDTString(LLDate& date, const std::string& str) { - S32 month, day, year; - S32 matched = sscanf(str.c_str(), "%d/%d/%d", &month, &day, &year); - if (matched != 3) return false; - date.fromYMDHMS(year, month, day); - F64 secs_since_epoch = date.secondsSinceEpoch(); - // Correct for the fact that specified date is in Pacific time, == UTC - 8 - secs_since_epoch += 8.0 * 60.0 * 60.0; - date.secondsSinceEpoch(secs_since_epoch); - return true; + S32 month, day, year; + S32 matched = sscanf(str.c_str(), "%d/%d/%d", &month, &day, &year); + if (matched != 3) return false; + date.fromYMDHMS(year, month, day); + F64 secs_since_epoch = date.secondsSinceEpoch(); + // Correct for the fact that specified date is in Pacific time, == UTC - 8 + secs_since_epoch += 8.0 * 60.0 * 60.0; + date.secondsSinceEpoch(secs_since_epoch); + return true; } std::string LLDateUtil::ageFromDate(const LLDate& born_date, const LLDate& now) { - S32 born_month, born_day, born_year; - // explode out to month/day/year again - born_date.split(&born_year, &born_month, &born_day); - - S32 now_year, now_month, now_day; - now.split(&now_year, &now_month, &now_day); - - // Do grade-school subtraction, from right-to-left, borrowing from the left - // when things go negative - S32 age_days = (now_day - born_day); - if (age_days < 0) - { - now_month -= 1; - if (now_month == 0) - { - now_year -= 1; - now_month = 12; - } - age_days += days_from_month(now_year, now_month); - } - S32 age_months = (now_month - born_month); - if (age_months < 0) - { - now_year -= 1; - age_months += 12; - } - S32 age_years = (now_year - born_year); - - // Noun pluralization depends on language - std::string lang = LLUI::getLanguage(); - - // Try for age in round number of years - LLStringUtil::format_map_t args; - - if (age_months > 0 || age_years > 0) - { - args["[AGEYEARS]"] = - LLTrans::getCountString(lang, "AgeYears", age_years); - args["[AGEMONTHS]"] = - LLTrans::getCountString(lang, "AgeMonths", age_months); - - // We want to display times like: - // 2 year 2 months - // 2 years (implicitly 0 months) - // 11 months - if (age_years > 0) - { - if (age_months > 0) - { - return LLTrans::getString("YearsMonthsOld", args); - } - else - { - return LLTrans::getString("YearsOld", args); - } - } - else // age_years == 0 - { - return LLTrans::getString("MonthsOld", args); - } - } - // you're 0 months old, display in weeks or days - - // Now for age in weeks - S32 age_weeks = age_days / 7; - age_days = age_days % 7; - if (age_weeks > 0) - { - args["[AGEWEEKS]"] = - LLTrans::getCountString(lang, "AgeWeeks", age_weeks); - return LLTrans::getString("WeeksOld", args); - } - - // Down to days now - if (age_days > 0) - { - args["[AGEDAYS]"] = - LLTrans::getCountString(lang, "AgeDays", age_days); - return LLTrans::getString("DaysOld", args); - } - - return LLTrans::getString("TodayOld"); + S32 born_month, born_day, born_year; + // explode out to month/day/year again + born_date.split(&born_year, &born_month, &born_day); + + S32 now_year, now_month, now_day; + now.split(&now_year, &now_month, &now_day); + + // Do grade-school subtraction, from right-to-left, borrowing from the left + // when things go negative + S32 age_days = (now_day - born_day); + if (age_days < 0) + { + now_month -= 1; + if (now_month == 0) + { + now_year -= 1; + now_month = 12; + } + age_days += days_from_month(now_year, now_month); + } + S32 age_months = (now_month - born_month); + if (age_months < 0) + { + now_year -= 1; + age_months += 12; + } + S32 age_years = (now_year - born_year); + + // Noun pluralization depends on language + std::string lang = LLUI::getLanguage(); + + // Try for age in round number of years + LLStringUtil::format_map_t args; + + if (age_months > 0 || age_years > 0) + { + args["[AGEYEARS]"] = + LLTrans::getCountString(lang, "AgeYears", age_years); + args["[AGEMONTHS]"] = + LLTrans::getCountString(lang, "AgeMonths", age_months); + + // We want to display times like: + // 2 year 2 months + // 2 years (implicitly 0 months) + // 11 months + if (age_years > 0) + { + if (age_months > 0) + { + return LLTrans::getString("YearsMonthsOld", args); + } + else + { + return LLTrans::getString("YearsOld", args); + } + } + else // age_years == 0 + { + return LLTrans::getString("MonthsOld", args); + } + } + // you're 0 months old, display in weeks or days + + // Now for age in weeks + S32 age_weeks = age_days / 7; + age_days = age_days % 7; + if (age_weeks > 0) + { + args["[AGEWEEKS]"] = + LLTrans::getCountString(lang, "AgeWeeks", age_weeks); + return LLTrans::getString("WeeksOld", args); + } + + // Down to days now + if (age_days > 0) + { + args["[AGEDAYS]"] = + LLTrans::getCountString(lang, "AgeDays", age_days); + return LLTrans::getString("DaysOld", args); + } + + return LLTrans::getString("TodayOld"); } std::string LLDateUtil::ageFromDate(const std::string& date_string, const LLDate& now) { - LLDate born_date; + LLDate born_date; - if (!dateFromPDTString(born_date, date_string)) - return "???"; + if (!dateFromPDTString(born_date, date_string)) + return "???"; - return ageFromDate(born_date, now); + return ageFromDate(born_date, now); } std::string LLDateUtil::ageFromDate(const std::string& date_string) { - return ageFromDate(date_string, LLDate::now()); + return ageFromDate(date_string, LLDate::now()); } //std::string LLDateUtil::ageFromDateISO(const std::string& date_string, -// const LLDate& now) +// const LLDate& now) //{ -// S32 born_month, born_day, born_year; -// S32 matched = sscanf(date_string.c_str(), "%d-%d-%d", -// &born_year, &born_month, &born_day); -// if (matched != 3) return "???"; -// date.fromYMDHMS(year, month, day); -// F64 secs_since_epoch = date.secondsSinceEpoch(); -// // Correct for the fact that specified date is in Pacific time, == UTC - 8 -// secs_since_epoch += 8.0 * 60.0 * 60.0; -// date.secondsSinceEpoch(secs_since_epoch); -// return ageFromDate(born_year, born_month, born_day, now); +// S32 born_month, born_day, born_year; +// S32 matched = sscanf(date_string.c_str(), "%d-%d-%d", +// &born_year, &born_month, &born_day); +// if (matched != 3) return "???"; +// date.fromYMDHMS(year, month, day); +// F64 secs_since_epoch = date.secondsSinceEpoch(); +// // Correct for the fact that specified date is in Pacific time, == UTC - 8 +// secs_since_epoch += 8.0 * 60.0 * 60.0; +// date.secondsSinceEpoch(secs_since_epoch); +// return ageFromDate(born_year, born_month, born_day, now); //} // //std::string LLDateUtil::ageFromDateISO(const std::string& date_string) //{ -// return ageFromDateISO(date_string, LLDate::now()); +// return ageFromDateISO(date_string, LLDate::now()); //} S32 LLDateUtil::secondsSinceEpochFromString(const std::string& format, const std::string& str) { - date_input_facet *facet = new date_input_facet(format); + date_input_facet *facet = new date_input_facet(format); - std::stringstream ss; - ss << str; - ss.imbue(std::locale(ss.getloc(), facet)); + std::stringstream ss; + ss << str; + ss.imbue(std::locale(ss.getloc(), facet)); - date d; - ss >> d; + date d; + ss >> d; - ptime time_t_date(d); - ptime time_t_epoch(date(1970,1,1)); + ptime time_t_date(d); + ptime time_t_epoch(date(1970,1,1)); - // We assume that the date defined by str is in UTC, so the difference - // is calculated with no time zone corrections. - time_duration diff = time_t_date - time_t_epoch; + // We assume that the date defined by str is in UTC, so the difference + // is calculated with no time zone corrections. + time_duration diff = time_t_date - time_t_epoch; - return diff.total_seconds(); + return diff.total_seconds(); } |