25 #include <com/sun/star/i18n/CalendarDisplayCode.hpp>
26 #include <com/sun/star/i18n/CalendarDisplayIndex.hpp>
27 #include <com/sun/star/i18n/NativeNumberMode.hpp>
28 #include <com/sun/star/i18n/reservedWords.hpp>
30 #include <rtl/math.hxx>
36 #define erDUMP_ICU_CALENDAR 0
37 #define erDUMP_I18N_CALENDAR 0
38 #if erDUMP_ICU_CALENDAR || erDUMP_I18N_CALENDAR
46 static void debug_cal_loc(
const char *f, int32_t l)
48 fprintf(stderr,
"%s:%d: ", f, l);
51 static void debug_cal_msg(
const char *pat, ...)
55 vfprintf(stderr, pat, ap);
59 #if erDUMP_ICU_CALENDAR
64 extern void ucal_dump(
const icu::Calendar & );
65 static void debug_icu_cal_dump( const ::icu::Calendar & r )
72 #define DUMP_ICU_CAL_MSG(x) {debug_cal_loc(__FILE__,__LINE__);debug_cal_msg x;debug_icu_cal_dump(*body);}
73 #else // erDUMP_ICU_CALENDAR
74 #define DUMP_ICU_CAL_MSG(x)
75 #endif // erDUMP_ICU_CALENDAR
77 #if erDUMP_I18N_CALENDAR
78 static void debug_cal_millis_to_time(
long nMillis,
long & h,
long & m,
long & s,
long & f )
80 int sign = (nMillis < 0 ? -1 : 1);
81 nMillis = ::std::abs(nMillis);
82 h = sign * nMillis / (60 * 60 * 1000);
83 nMillis -= sign * h * (60 * 60 * 1000);
84 m = nMillis / (60 * 1000);
85 nMillis -= m * (60 * 1000);
87 nMillis -= s * (1000);
90 static void debug_i18n_cal_dump( const ::icu::Calendar & r )
93 long nMillis,
h,
m, s,
f;
94 fprintf( stderr,
" %04ld", (
long)r.get( UCAL_YEAR, status = U_ZERO_ERROR));
95 fprintf( stderr,
"-%02ld", (
long)r.get( UCAL_MONTH, status = U_ZERO_ERROR)+1);
96 fprintf( stderr,
"-%02ld", (
long)r.get( UCAL_DATE, status = U_ZERO_ERROR));
97 fprintf( stderr,
" %02ld", (
long)r.get( UCAL_HOUR_OF_DAY, status = U_ZERO_ERROR));
98 fprintf( stderr,
":%02ld", (
long)r.get( UCAL_MINUTE, status = U_ZERO_ERROR));
99 fprintf( stderr,
":%02ld", (
long)r.get( UCAL_SECOND, status = U_ZERO_ERROR));
100 fprintf( stderr,
" zone: %ld", (
long)(nMillis = r.get( UCAL_ZONE_OFFSET, status = U_ZERO_ERROR)));
101 fprintf( stderr,
" (%f min)", (
double)nMillis / 60000);
102 debug_cal_millis_to_time( nMillis, h, m, s, f);
103 fprintf( stderr,
" (%ld:%02ld:%02ld.%ld)", h, m, s, f);
104 fprintf( stderr,
" DST: %ld", (
long)(nMillis = r.get( UCAL_DST_OFFSET, status = U_ZERO_ERROR)));
105 fprintf( stderr,
" (%f min)", (
double)nMillis / 60000);
106 debug_cal_millis_to_time( nMillis, h, m, s, f);
107 fprintf( stderr,
" (%ld:%02ld:%02ld.%ld)", h, m, s, f);
108 fprintf( stderr,
"\n");
112 #define DUMP_I18N_CAL_MSG(x) {debug_cal_loc(__FILE__,__LINE__);debug_cal_msg x;debug_i18n_cal_dump(*body);}
113 #else // erDUMP_I18N_CALENDAR
114 #define DUMP_I18N_CAL_MSG(x)
115 #endif // erDUMP_I18N_CALENDAR
117 #else // erDUMP_ICU_CALENDAR || erDUMP_I18N_CALENDAR
118 #define DUMP_ICU_CAL_MSG(x)
119 #define DUMP_I18N_CAL_MSG(x)
120 #endif // erDUMP_ICU_CALENDAR || erDUMP_I18N_CALENDAR
138 return static_cast<sal_Int16
>(a);
143 return static_cast<sal_Int32
>(
static_cast<sal_uInt16
>(i));
159 cCalendar =
"com.sun.star.i18n.Calendar_gregorian";
182 icu::Locale aIcuLocale(
"",
nullptr,
nullptr,
"calendar=gregorian");
189 UErrorCode status = U_ZERO_ERROR;
190 body.reset( icu::Calendar::createInstance( aIcuLocale, status) );
201 cCalendar =
"com.sun.star.i18n.Calendar_hanja";
207 if ( displayIndex == CalendarDisplayIndex::AM_PM ) {
209 css::lang::Locale jaLocale(
"ja", OUString(), OUString());
221 cCalendar =
"com.sun.star.i18n.Calendar_Calendar_hanja_yoil";
227 if ( displayIndex == CalendarDisplayIndex::AM_PM ) {
229 css::lang::Locale jaLocale(
"ja", OUString(), OUString());
249 cCalendar =
"com.sun.star.i18n.Calendar_gengou";
258 cCalendar =
"com.sun.star.i18n.Calendar_ROC";
271 cCalendar =
"com.sun.star.i18n.Calendar_dangi";
280 cCalendar =
"com.sun.star.i18n.Calendar_buddhist";
291 for (
const auto& rCal : xC)
293 if (uniqueID == rCal.Name)
298 aCalendar.MinimumNumberOfDaysForFirstWeek);
300 for (sal_Int16
day = sal::static_int_cast<sal_Int16>(
316 css::i18n::Calendar2 SAL_CALL
322 css::i18n::Calendar SAL_CALL
344 double fM = fTimeInDays * U_MILLIS_PER_DAY;
345 double fR = rtl::math::round( fM );
347 "Calendar_gregorian::setDateTime: " << std::fixed << fM <<
" rounded to " << fR);
348 UErrorCode status = U_ZERO_ERROR;
349 body->setTime( fR, status);
361 UErrorCode status = U_ZERO_ERROR;
362 double fR =
body->getTime(status);
364 return fR / U_MILLIS_PER_DAY;
371 double fM = fTimeInDays * U_MILLIS_PER_DAY;
372 double fR = rtl::math::round( fM );
374 "Calendar_gregorian::setLocalDateTime: " << std::fixed << fM <<
" rounded to " << fR);
375 int32_t nZoneOffset, nDSTOffset;
376 UErrorCode status = U_ZERO_ERROR;
377 body->getTimeZone().getOffset( fR,
true, nZoneOffset, nDSTOffset, status );
380 status = U_ZERO_ERROR;
381 body->setTime( fR - (nZoneOffset + nDSTOffset), status );
393 UErrorCode status = U_ZERO_ERROR;
394 double fTime =
body->getTime( status );
396 status = U_ZERO_ERROR;
397 int32_t nZoneOffset =
body->get( UCAL_ZONE_OFFSET, status );
399 status = U_ZERO_ERROR;
400 int32_t nDSTOffset =
body->get( UCAL_DST_OFFSET, status );
402 return (fTime + (nZoneOffset + nDSTOffset)) / U_MILLIS_PER_DAY;
412 const icu::UnicodeString aID( reinterpret_cast<const UChar*>(rTimeZone.getStr()), rTimeZone.getLength());
413 const std::unique_ptr<const icu::TimeZone> pTZ( icu::TimeZone::createTimeZone(aID));
417 body->setTimeZone(*pTZ);
433 m =
fieldValue[CalendarFieldIndex::MONTH] + 1;
434 d =
fieldValue[CalendarFieldIndex::DAY_OF_MONTH];
450 #define FIELDS ((1 << CalendarFieldIndex::ERA) | (1 << CalendarFieldIndex::YEAR))
458 sal_Int16 e =
fieldValue[CalendarFieldIndex::ERA];
473 UCalendarDateFields f;
475 switch (fieldIndex) {
476 case CalendarFieldIndex::AM_PM: f = UCAL_AM_PM;
break;
477 case CalendarFieldIndex::DAY_OF_MONTH: f = UCAL_DATE;
break;
478 case CalendarFieldIndex::DAY_OF_WEEK: f = UCAL_DAY_OF_WEEK;
break;
479 case CalendarFieldIndex::DAY_OF_YEAR: f = UCAL_DAY_OF_YEAR;
break;
480 case CalendarFieldIndex::DST_OFFSET: f = UCAL_DST_OFFSET;
break;
481 case CalendarFieldIndex::ZONE_OFFSET: f = UCAL_ZONE_OFFSET;
break;
482 case CalendarFieldIndex::HOUR: f = UCAL_HOUR_OF_DAY;
break;
483 case CalendarFieldIndex::MINUTE: f = UCAL_MINUTE;
break;
484 case CalendarFieldIndex::SECOND: f = UCAL_SECOND;
break;
485 case CalendarFieldIndex::MILLISECOND: f = UCAL_MILLISECOND;
break;
486 case CalendarFieldIndex::WEEK_OF_MONTH: f = UCAL_WEEK_OF_MONTH;
break;
487 case CalendarFieldIndex::WEEK_OF_YEAR: f = UCAL_WEEK_OF_YEAR;
break;
488 case CalendarFieldIndex::YEAR: f = UCAL_YEAR;
break;
489 case CalendarFieldIndex::MONTH: f = UCAL_MONTH;
break;
490 case CalendarFieldIndex::ERA: f = UCAL_ERA;
break;
506 sal_Int16 nParentFieldIndex, sal_Int16 nChildFieldIndex )
const
509 bool bFieldsSet =
false;
510 if (
fieldSet & (1 << nParentFieldIndex))
513 o_nOffset =
static_cast<sal_Int32
>(
fieldValue[nParentFieldIndex]) * 60000;
515 if (
fieldSet & (1 << nChildFieldIndex))
519 o_nOffset -=
static_cast<sal_uInt16
>(
fieldValue[nChildFieldIndex]);
521 o_nOffset +=
static_cast<sal_uInt16
>(
fieldValue[nChildFieldIndex]);
529 CalendarFieldIndex::ZONE_OFFSET_SECOND_MILLIS);
535 CalendarFieldIndex::DST_OFFSET_SECOND_MILLIS);
549 case CalendarFieldIndex::ZONE_OFFSET:
550 case CalendarFieldIndex::DST_OFFSET:
551 case CalendarFieldIndex::ZONE_OFFSET_SECOND_MILLIS:
552 case CalendarFieldIndex::DST_OFFSET_SECOND_MILLIS:
557 sal_Int32 nZoneOffset, nDSTOffset;
579 #if erDUMP_ICU_CALENDAR || erDUMP_I18N_CALENDAR
583 sal_Int32 nTmp =
body->get( UCAL_DATE, status = U_ZERO_ERROR);
596 if (fieldIndex == CalendarFieldIndex::ZONE_OFFSET_SECOND_MILLIS ||
597 fieldIndex == CalendarFieldIndex::DST_OFFSET_SECOND_MILLIS)
600 UErrorCode status = U_ZERO_ERROR;
602 fieldIndex), status);
607 if (fieldIndex == CalendarFieldIndex::ZONE_OFFSET)
609 sal_Int32 nMinutes = value / 60000;
610 sal_Int16 nMillis =
static_cast<sal_Int16
>(
static_cast<sal_uInt16
>(
611 abs( value - nMinutes * 60000)));
612 fieldValue[CalendarFieldIndex::ZONE_OFFSET] =
static_cast<sal_Int16
>( nMinutes);
613 fieldValue[CalendarFieldIndex::ZONE_OFFSET_SECOND_MILLIS] = nMillis;
615 else if (fieldIndex == CalendarFieldIndex::DST_OFFSET)
617 sal_Int32 nMinutes = value / 60000;
618 sal_Int16 nMillis =
static_cast<sal_Int16
>(
static_cast<sal_uInt16
>(
619 abs( value - nMinutes * 60000)));
620 fieldValue[CalendarFieldIndex::DST_OFFSET] =
static_cast<sal_Int16
>( nMinutes);
621 fieldValue[CalendarFieldIndex::DST_OFFSET_SECOND_MILLIS] = nMillis;
627 if ( fieldIndex == CalendarFieldIndex::DAY_OF_WEEK )
652 UErrorCode status = U_ZERO_ERROR;
668 if (tmp & (1 << fieldIndex)) {
686 sal_Int32 nCalendarDisplayCode, sal_Int16 nNativeNumberMode, sal_Int32
value )
688 bool isShort = ((nCalendarDisplayCode == CalendarDisplayCode::SHORT_YEAR ||
689 nCalendarDisplayCode == CalendarDisplayCode::LONG_YEAR) && value >= 100) ||
690 nCalendarDisplayCode == CalendarDisplayCode::SHORT_QUARTER ||
691 nCalendarDisplayCode == CalendarDisplayCode::LONG_QUARTER;
692 bool isChinese = aLocale.Language ==
"zh";
693 bool isJapanese = aLocale.Language ==
"ja";
694 bool isKorean = aLocale.Language ==
"ko";
696 if (isChinese || isJapanese || isKorean) {
697 switch (nNativeNumberMode) {
698 case NativeNumberMode::NATNUM1:
700 nNativeNumberMode = isJapanese ? NativeNumberMode::NATNUM4 : NativeNumberMode::NATNUM7;
702 case NativeNumberMode::NATNUM2:
704 nNativeNumberMode = isJapanese ? NativeNumberMode::NATNUM5 : NativeNumberMode::NATNUM8;
706 case NativeNumberMode::NATNUM3:
708 case NativeNumberMode::NATNUM4:
710 return isShort ? NativeNumberMode::NATNUM9 : NativeNumberMode::NATNUM11;
715 return nNativeNumberMode;
720 switch( nCalendarDisplayCode ) {
721 case CalendarDisplayCode::SHORT_DAY:
722 case CalendarDisplayCode::LONG_DAY:
723 return CalendarFieldIndex::DAY_OF_MONTH;
724 case CalendarDisplayCode::SHORT_DAY_NAME:
725 case CalendarDisplayCode::LONG_DAY_NAME:
726 case CalendarDisplayCode::NARROW_DAY_NAME:
727 return CalendarFieldIndex::DAY_OF_WEEK;
728 case CalendarDisplayCode::SHORT_QUARTER:
729 case CalendarDisplayCode::LONG_QUARTER:
730 case CalendarDisplayCode::SHORT_MONTH:
731 case CalendarDisplayCode::LONG_MONTH:
732 case CalendarDisplayCode::SHORT_MONTH_NAME:
733 case CalendarDisplayCode::LONG_MONTH_NAME:
734 case CalendarDisplayCode::NARROW_MONTH_NAME:
735 case CalendarDisplayCode::SHORT_GENITIVE_MONTH_NAME:
736 case CalendarDisplayCode::LONG_GENITIVE_MONTH_NAME:
737 case CalendarDisplayCode::NARROW_GENITIVE_MONTH_NAME:
738 case CalendarDisplayCode::SHORT_PARTITIVE_MONTH_NAME:
739 case CalendarDisplayCode::LONG_PARTITIVE_MONTH_NAME:
740 case CalendarDisplayCode::NARROW_PARTITIVE_MONTH_NAME:
741 return CalendarFieldIndex::MONTH;
742 case CalendarDisplayCode::SHORT_YEAR:
743 case CalendarDisplayCode::LONG_YEAR:
744 return CalendarFieldIndex::YEAR;
745 case CalendarDisplayCode::SHORT_ERA:
746 case CalendarDisplayCode::LONG_ERA:
747 return CalendarFieldIndex::ERA;
748 case CalendarDisplayCode::SHORT_YEAR_AND_ERA:
749 case CalendarDisplayCode::LONG_YEAR_AND_ERA:
750 return CalendarFieldIndex::YEAR;
761 return ::std::max( sal::static_int_cast<sal_Int16>(0),
762 sal::static_int_cast<sal_Int16>( static_cast<sal_Int16>(
763 body->getFirstDayOfWeek()) - 1));
770 body->setFirstDayOfWeek( static_cast<UCalendarDaysOfWeek>( day + 1));
776 aCalendar.MinimumNumberOfDaysForFirstWeek = days;
777 body->setMinimalDaysInFirstWeek( static_cast<uint8_t>( days));
783 return aCalendar.MinimumNumberOfDaysForFirstWeek;
789 return static_cast<sal_Int16
>(
aCalendar.Months.getLength());
796 return static_cast<sal_Int16
>(
aCalendar.Days.getLength());
800 Sequence< CalendarItem > SAL_CALL
807 Sequence< CalendarItem > SAL_CALL
814 Sequence< CalendarItem2 > SAL_CALL
821 Sequence< CalendarItem2 > SAL_CALL
828 Sequence< CalendarItem2 > SAL_CALL
835 Sequence< CalendarItem2 > SAL_CALL
847 switch( displayIndex ) {
848 case CalendarDisplayIndex::AM_PM:
853 case CalendarDisplayIndex::DAY:
855 if (nameType == 0) aStr =
aCalendar.Days[
idx].AbbrevName;
856 else if (nameType == 1) aStr =
aCalendar.Days[
idx].FullName;
857 else if (nameType == 2) aStr =
aCalendar.Days[
idx].NarrowName;
860 case CalendarDisplayIndex::MONTH:
862 if (nameType == 0) aStr =
aCalendar.Months[
idx].AbbrevName;
863 else if (nameType == 1) aStr =
aCalendar.Months[
idx].FullName;
864 else if (nameType == 2) aStr =
aCalendar.Months[
idx].NarrowName;
867 case CalendarDisplayIndex::GENITIVE_MONTH:
869 if (nameType == 0) aStr =
aCalendar.GenitiveMonths[
idx].AbbrevName;
870 else if (nameType == 1) aStr =
aCalendar.GenitiveMonths[
idx].FullName;
871 else if (nameType == 2) aStr =
aCalendar.GenitiveMonths[
idx].NarrowName;
874 case CalendarDisplayIndex::PARTITIVE_MONTH:
876 if (nameType == 0) aStr =
aCalendar.PartitiveMonths[
idx].AbbrevName;
877 else if (nameType == 1) aStr =
aCalendar.PartitiveMonths[
idx].FullName;
878 else if (nameType == 2) aStr =
aCalendar.PartitiveMonths[
idx].NarrowName;
881 case CalendarDisplayIndex::ERA:
883 if (nameType == 0) aStr =
aCalendar.Eras[
idx].AbbrevName;
884 else if (nameType == 1) aStr =
aCalendar.Eras[
idx].FullName;
887 case CalendarDisplayIndex::YEAR:
909 if (nCalendarDisplayCode == CalendarDisplayCode::SHORT_QUARTER ||
910 nCalendarDisplayCode == CalendarDisplayCode::LONG_QUARTER) {
912 sal_Int16 quarter = value / 3;
921 quarter = sal::static_int_cast<sal_Int16>( quarter +
922 ((nCalendarDisplayCode == CalendarDisplayCode::SHORT_QUARTER) ?
923 reservedWords::QUARTER1_ABBREVIATION : reservedWords::QUARTER1_WORD) );
924 aOUStr = xR[quarter];
930 switch( nCalendarDisplayCode ) {
931 case CalendarDisplayCode::SHORT_MONTH:
934 case CalendarDisplayCode::SHORT_DAY:
935 sprintf(aStr,
"%" SAL_PRIdINT32, value);
937 case CalendarDisplayCode::LONG_YEAR:
939 sprintf(aStr,
"%02" SAL_PRIdINT32, value);
941 sprintf(aStr,
"%" SAL_PRIdINT32, value);
943 case CalendarDisplayCode::LONG_MONTH:
945 sprintf(aStr,
"%02" SAL_PRIdINT32, value);
947 case CalendarDisplayCode::SHORT_YEAR:
960 sprintf(aStr,
"%" SAL_PRIdINT32, value);
962 sprintf(aStr,
"%02" SAL_PRIdINT32, value % 100);
964 case CalendarDisplayCode::LONG_DAY:
965 sprintf(aStr,
"%02" SAL_PRIdINT32, value);
968 case CalendarDisplayCode::SHORT_DAY_NAME:
970 case CalendarDisplayCode::LONG_DAY_NAME:
972 case CalendarDisplayCode::NARROW_DAY_NAME:
974 case CalendarDisplayCode::SHORT_MONTH_NAME:
976 case CalendarDisplayCode::LONG_MONTH_NAME:
978 case CalendarDisplayCode::NARROW_MONTH_NAME:
980 case CalendarDisplayCode::SHORT_GENITIVE_MONTH_NAME:
981 return getDisplayName(CalendarDisplayIndex::GENITIVE_MONTH, value, 0);
982 case CalendarDisplayCode::LONG_GENITIVE_MONTH_NAME:
983 return getDisplayName(CalendarDisplayIndex::GENITIVE_MONTH, value, 1);
984 case CalendarDisplayCode::NARROW_GENITIVE_MONTH_NAME:
985 return getDisplayName(CalendarDisplayIndex::GENITIVE_MONTH, value, 2);
986 case CalendarDisplayCode::SHORT_PARTITIVE_MONTH_NAME:
987 return getDisplayName(CalendarDisplayIndex::PARTITIVE_MONTH, value, 0);
988 case CalendarDisplayCode::LONG_PARTITIVE_MONTH_NAME:
989 return getDisplayName(CalendarDisplayIndex::PARTITIVE_MONTH, value, 1);
990 case CalendarDisplayCode::NARROW_PARTITIVE_MONTH_NAME:
991 return getDisplayName(CalendarDisplayIndex::PARTITIVE_MONTH, value, 2);
992 case CalendarDisplayCode::SHORT_ERA:
994 case CalendarDisplayCode::LONG_ERA:
997 case CalendarDisplayCode::SHORT_YEAR_AND_ERA:
1001 case CalendarDisplayCode::LONG_YEAR_AND_ERA:
1008 aOUStr = OUString::createFromAscii(aStr);
1011 if (nNativeNumberMode > 0 && nNativeNumberMode != 12) {
1013 if (
eraArray == gengou_eraArray && value == 1
1014 && (nCalendarDisplayCode == CalendarDisplayCode::SHORT_YEAR ||
1015 nCalendarDisplayCode == CalendarDisplayCode::LONG_YEAR)
1016 && (nNativeNumberMode == NativeNumberMode::NATNUM1 ||
1017 nNativeNumberMode == NativeNumberMode::NATNUM2)) {
1019 return OUString(&gan, 1);
1033 if ((nCalendarDisplayCode == CalendarDisplayCode::LONG_YEAR_AND_ERA ||
1034 nCalendarDisplayCode == CalendarDisplayCode::SHORT_YEAR_AND_ERA) &&
1035 getValue(CalendarFieldIndex::ERA) == 0) {
1036 if (nCalendarDisplayCode == CalendarDisplayCode::LONG_YEAR_AND_ERA)
1049 return OUString::createFromAscii(
cCalendar);
const Era gengou_eraArray[]
exports com.sun.star.frame. status
virtual double SAL_CALL getDateTime() override
css::i18n::Calendar2 aCalendar
virtual double SAL_CALL getLocalDateTime() override
#define SAL_INFO_IF(condition, area, stream)
void init(const Era *_eraArray)
virtual ~Calendar_gregorian() override
Destructor.
virtual void SAL_CALL addValue(sal_Int16 nFieldIndex, sal_Int32 nAmount) override
virtual css::uno::Sequence< css::i18n::CalendarItem > SAL_CALL getMonths() override
static sal_Int32 DisplayCode2FieldIndex(sal_Int32 nCalendarDisplayCode)
void setValue()
Set fields internally.
virtual sal_Int16 SAL_CALL getNumberOfDaysInWeek() override
OUString getDisplayStringImpl(sal_Int32 nCalendarDisplayCode, sal_Int16 nNativeNumberMode, bool bEraMode)
SwNodeOffset abs(const SwNodeOffset &a)
virtual css::uno::Sequence< css::i18n::CalendarItem2 > SAL_CALL getPartitiveMonths2() override
const sal_Int16 FIELD_INDEX_COUNT
virtual css::i18n::Calendar SAL_CALL getLoadedCalendar() override
virtual OUString SAL_CALL getUniqueID() override
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
const Era dangi_eraArray[]
The start year of the Korean traditional calendar (Dan-gi) is the inaugural year of Dan-gun (BC 2333)...
static sal_Int32 cast16To32(sal_Int16 i)
virtual void mapToGregorian()
virtual OUString SAL_CALL getImplementationName() override
static sal_Int16 NatNumForCalendar(const css::lang::Locale &aLocale, sal_Int32 nCalendarDisplayCode, sal_Int16 nNativeNumberMode, sal_Int32 value)
virtual css::uno::Sequence< css::i18n::CalendarItem2 > SAL_CALL getGenitiveMonths2() override
virtual void SAL_CALL setDateTime(double fTimeInDays) override
virtual OUString SAL_CALL getDisplayString(sal_Int32 nCalendarDisplayCode, sal_Int16 nNativeNumberMode) override
void submitFields()
Submit fieldSetValue array according to fieldSet.
virtual sal_Bool SAL_CALL isValid() override
static rtl::Reference< LocaleDataImpl > get()
virtual css::uno::Sequence< css::i18n::CalendarItem2 > SAL_CALL getMonths2() override
bool getCombinedOffset(sal_Int32 &o_nOffset, sal_Int16 nParentFieldIndex, sal_Int16 nChildFieldIndex) const
Used by getZoneOffset() and getDSTOffset().
bool getDSTOffset(sal_Int32 &o_nOffset) const
Obtain combined field values for DST offset (minutes+secondmillis) in milliseconds and whether fields...
virtual css::uno::Sequence< css::i18n::CalendarItem > SAL_CALL getDays() override
const sal_uInt8 kDisplayEraForcedLongYear
sal_Int16 fieldValue[FIELD_INDEX_COUNT]
Constant values shared between i18npool and, for example, the number formatter.
virtual OUString SAL_CALL getDisplayName(sal_Int16 nCalendarDisplayIndex, sal_Int16 nIdx, sal_Int16 nNameType) override
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
virtual sal_Bool SAL_CALL supportsService(const OUString &ServiceName) override
bool getZoneOffset(sal_Int32 &o_nOffset) const
Obtain combined field values for timezone offset (minutes+secondmillis) in milliseconds and whether f...
virtual OUString SAL_CALL getDisplayName(sal_Int16 nCalendarDisplayIndex, sal_Int16 nIdx, sal_Int16 nNameType) override
virtual void mapFromGregorian()
virtual void SAL_CALL setFirstDayOfWeek(sal_Int16 nDay) override
sal_Int16 fieldSetValue[FIELD_INDEX_COUNT]
virtual sal_Int16 SAL_CALL getMinimumNumberOfDaysForFirstWeek() override
virtual css::uno::Sequence< css::i18n::CalendarItem2 > SAL_CALL getDays2() override
static css::uno::Sequence< css::i18n::CalendarItem > downcastCalendarItems(const css::uno::Sequence< css::i18n::CalendarItem2 > &rCi)
rtl::Reference< NativeNumberSupplierService > mxNatNum
static UCalendarDateFields fieldNameConverter(sal_Int16 fieldIndex)
const Era buddhist_eraArray[]
virtual OUString SAL_CALL getDisplayString(sal_Int32 nCalendarDisplayCode, sal_Int16 nNativeNumberMode) override
virtual sal_Int16 SAL_CALL getNumberOfMonthsInYear() override
virtual sal_Int16 SAL_CALL getFirstDayOfWeek() override
virtual void SAL_CALL setLocalDateTime(double TimeInDays) override
#define DUMP_ICU_CAL_MSG(x)
static sal_Int16 cast32To16(sal_Int32 a)
css::lang::Locale aLocale
virtual OUString SAL_CALL getDisplayName(sal_Int16 nCalendarDisplayIndex, sal_Int16 nIdx, sal_Int16 nNameType) override
#define DUMP_I18N_CAL_MSG(x)
void(* f)(TrueTypeTable *)
static css::i18n::Calendar downcastCalendar(const css::i18n::Calendar2 &rC)
virtual void SAL_CALL setMinimumNumberOfDaysForFirstWeek(sal_Int16 nDays) override
std::unique_ptr< icu::Calendar > body
virtual void SAL_CALL loadCalendar(const OUString &uniqueID, const css::lang::Locale &rLocale) override
virtual css::i18n::Calendar2 SAL_CALL getLoadedCalendar2() override
bool setTimeZone(const OUString &rTimeZone)