diff --git a/src/kits/locale/DateTimeFormat.cpp b/src/kits/locale/DateTimeFormat.cpp index 794edc1705..eb4bcea85d 100644 --- a/src/kits/locale/DateTimeFormat.cpp +++ b/src/kits/locale/DateTimeFormat.cpp @@ -61,8 +61,12 @@ BDateTimeFormat::SetDateTimeFormat(BDateFormatStyle dateStyle, skeleton << "dd"; if (elements & B_DATE_ELEMENT_AM_PM) skeleton << "a"; - if (elements & B_DATE_ELEMENT_HOUR) - skeleton << "jj"; + if (elements & B_DATE_ELEMENT_HOUR) { + if (fConventions.Use24HourClock()) + skeleton << "HH"; + else + skeleton << "KK"; + } if (elements & B_DATE_ELEMENT_MINUTE) skeleton << "mm"; if (elements & B_DATE_ELEMENT_SECOND) diff --git a/src/tests/kits/locale/DateFormatTest.cpp b/src/tests/kits/locale/DateFormatTest.cpp index 0eb96ff947..733282dd9e 100644 --- a/src/tests/kits/locale/DateFormatTest.cpp +++ b/src/tests/kits/locale/DateFormatTest.cpp @@ -28,15 +28,34 @@ DateFormatTest::~DateFormatTest() void DateFormatTest::TestCustomFormat() { - int32 fields = B_DATE_ELEMENT_HOUR | B_DATE_ELEMENT_MINUTE; - BDateTimeFormat format; BString buffer; + BLanguage language("en"); + BFormattingConventions formatting("en_US"); + int32 fields = B_DATE_ELEMENT_HOUR | B_DATE_ELEMENT_MINUTE; + + BDateTimeFormat format(&language, &formatting); + + NextSubTest(); + + formatting.SetExplicitUse24HourClock(true); + format.SetFormattingConventions(formatting); format.SetDateTimeFormat(B_SHORT_DATE_FORMAT, B_SHORT_TIME_FORMAT, fields); - status_t result = format.Format(buffer, 12345, B_SHORT_DATE_FORMAT, + status_t result = format.Format(buffer, 12345678, B_SHORT_DATE_FORMAT, B_SHORT_TIME_FORMAT); CPPUNIT_ASSERT_EQUAL(B_OK, result); - CPPUNIT_ASSERT_EQUAL(BString("04:25"), buffer); + CPPUNIT_ASSERT_EQUAL(BString("22:21"), buffer); + + NextSubTest(); + + formatting.SetExplicitUse24HourClock(false); + format.SetFormattingConventions(formatting); + format.SetDateTimeFormat(B_SHORT_DATE_FORMAT, B_SHORT_TIME_FORMAT, fields); + result = format.Format(buffer, 12345678, B_SHORT_DATE_FORMAT, + B_SHORT_TIME_FORMAT); + + CPPUNIT_ASSERT_EQUAL(B_OK, result); + CPPUNIT_ASSERT_EQUAL(BString("10:21 PM"), buffer); }